new SampleClass().start().join(); This is wrong.
您可以通過
SampleClass samClass = new SampleClass();
samClass.start();
samClass.join()
上面的代碼實現類似的事情都會有你想要的效果相同。
現在你的問題是按順序運行線程。 在大多數這些 的情況下,你不需要線程順序執行(但是有一些情況)。 那麼如果你不得不。
然後你就可以像這樣
Thread t1 = ..
Thread t2 = ..
t1.start();
t1.join();
t2.start(); // t2 will start only when t1 dies
t2.join(); //
t3.start(); // t3 will start only when t2 dies..
但上面的方法並不好。因爲要啓動其他線程,需要先前線程 。在實踐中,我們應該考慮將線程創建爲昂貴的操作 並嘗試重用。
真正的問題往往就是這樣,你必須執行的任務T1,T2,T3,T4 順序,但在不同的線程T1 & & T3必須在一個線程運行,T2和T4 必須在另一個運行。 所以在這裏我們可以使用兩個線程而不是4個。 線程1將上 即
Thread1 -> T1
Thread2 -> T2
Thread1 -> T3
Thread2 -> T4
運行T1,然後線程2將運行T2,然後線程1將運行T3等所有任務將被順序地但僅使用2個線程執行。
你能解決這個問題,像下面
Thread1 ->run {
while(canIrun) {
executeTask(taskQueue1.next());
notifyThread2();
waitForThread2Signal();
}
}
Thread2 -.run {
while(canIrun) {
waitForThread1Signal();
executeTask(taskQueue2.next());
notifyThread1();
}
}
等待和通知方法可以很容易使用的CyclicBarrier來實現。
嗯......這個問題可以通過花2分鐘閱讀javadocs來回答。 –
我已經看過這裏 http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Thread.html#join%28%29 但我還沒有找到任何有用的信息給我。 – Emanuele