比方說,我們有這樣的場景:在運行時執行順序
class Stack{
public void main{
ChildThread1 t1 = new ChildThread1;
ChildThread1 t2 = new ChildThread1;
ChildThread1 t3 = new ChildThread1;
//then we make some ChildThread2 objects and some ChildThread3 objects
ChildThread2 s1 = new ChildThread2;
//...
ChildThread3 v1 = new ChildThread3;
//...
//now we let all threads start in mix order
t1.start();
v1.start();
//...
SOP("All threads are ready");
//then we let them run with join()
t1.join();
t2.join();
t3.join();
s1.join();
//...
v1.join();
//...
每種類型的線程打印自己獨特的聲明。
我注意到,每次執行程序時,輸出總是不一樣。例如,來自ChilThread1 t1的語句將在輸出中間打印而不是開始(因爲t1首先啓動)或語句「所有線程已準備就緒」將在線程執行的中間彈出(例如:ChildThread2是'所有線程都準備就緒「運行)
所以我試圖找到答案,我發現這個網站:http://www.avajava.com/tutorials/lessons/how-do-i-use-threads-join-method.html 該網站基本上說,有執行的禁擔保令,當您使用的start()
所以我是正確的假設這奇怪的打印順序是因爲start()不保證執行順序?這個原因是否也適用於'所有線程都準備好'的問題?
'新ChildThread1'它應該是'新ChildThread1()' –
我永遠不瞭解這些問題。如果你想或者期望執行某個特定的順序,你爲什麼要使用線程?如果你不知道它們是幹什麼的,你爲什麼使用線程? – EJP
@EJP每個人都必須在某個點上學習。爲什麼要敵對?用一種教他新東西的方式回答他的問題。 –