如何使多個執行緒順序執行(海拍客面試篇)

2021-10-01 05:29:00 字數 1240 閱讀 8362

問題:假設當前有四個執行緒,分別是a,b,c,d四個執行緒,假設現在設計乙個程式,讓a,b,c,d四個執行緒一次輸出a,b,c,d,迴圈十次。

當時面試過程中稍微有點緊張,雖然是面試實習生的崗位,可怕的是居然面試了三輪技術面。可能因為海拍客是小獨角獸的原因吧。

好了,言歸正傳。這本來是乙個比較簡單的問題,說白了就是執行緒同步。執行緒同步的話也就那幾種,synchronized,lock鎖,阻塞佇列這些東東。因為是現場面試的,所以要手寫出來,但是一上手的時候發現貌似不好寫啊,感覺不是那麼回事。但是即使沒寫出來,後面面試也僥倖通過了。可能是因為前面基礎知識回答的還行吧,嘿嘿!!

話不多說,現在讓我們看看怎麼來實現這個程式吧。以下有五種方式進行實現:

for(int i=0;i<10;i++)

}我們知道在程式中使用執行緒一般不會單個建立和銷毀,因為單個執行緒建立比較耗費資源,所以會復用執行緒,利用執行緒池來實現。

thread a = new thread(new runnable()

});thread b = new thread(new runnable()

});thread c = new thread(new runnable()

});thread d = new thread(new runnable()

});}

public static void main(string args)

});thread b = new thread(new runnable()

});thread c = new thread(new runnable()

});thread d = new thread(new runnable()

});a.start();

b.start();

c.start();

d.start();

acquire():當前執行緒嘗試去阻塞的獲取1個許可證,此過程是阻塞的,當前執行緒獲取了乙個可用的許可證,就會停止等待,繼續執行。

release():當前執行緒釋放乙個有用的許可證。

public static void main(string args)

});final thread b = new thread(new runnable()

});final thread c = new thread(new runnable()

});final thread d = new thread(new runnable()

});}

如何控制多執行緒執行順序

如果我們new了好幾個執行緒,然後開始執行,肯定不是按照順序執行的,因為多執行緒.start 方法開始執行之後,並不意味著立即執行,而是到就緒狀態,等待cpu的排程,cpu如何排程,那我們就沒法知道了,但是如何讓執行緒按照指定的順序來執行呢?我們可以利用執行緒的join方法。join 方法的主要作用...

如何控制多執行緒執行順序

如果我們new了好幾個執行緒,然後開始執行,肯定不是按照順序執行的,因為多執行緒.start 方法開始執行之後,並不意味著立即執行,而是到就緒狀態,等待cpu的排程,cpu如何排程,那我們就沒法知道了,但是如何讓執行緒按照指定的順序來執行呢?我們可以利用執行緒的join方法。join 方法的主要作用...

如何保證執行緒按順序執行

有三個執行緒t1 t2 t3,如何保證他們按順序執行 在t2的run中,呼叫t1.join,讓t1執行完成後再讓t2執行 在t2的run中,呼叫t2.join,讓t2執行完成後再讓t3執行 public class threadbyorder static thread t2 new thread ...