但我再次與join方法混淆。 我所知道的Java不能保證線程的執行正常情況下的順序。
我使用join()方法讀取,它確保一旦一個線程調用加盟,當前線程將不執行,除非你已經調用線程加入完畢。
我的例子我想
public class ThreadTest1 extends Thread{
@Override
public void run() {
super.run();
for(int i=0; i<10; i++)
{
System.out.println(i + " :"+ Thread.currentThread().getName());
}
}
public static void main(String[] args) {
System.out.println("Thread is getting started");
ThreadTest1 th0= new ThreadTest1();
th0.start();
ThreadTest1 th1= new ThreadTest1();
th1.start();
try {
th1.join(10000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
輸出:
First time output
0 :Thread-1
1 :Thread-1
2 :Thread-1
0 :Thread-0
3 :Thread-1
1 :Thread-0
4 :Thread-1
2 :Thread-0
5 :Thread-1
3 :Thread-0
6 :Thread-1
4 :Thread-0
7 :Thread-1
8 :Thread-1
9 :Thread-1
5 :Thread-0
6 :Thread-0
7 :Thread-0
8 :Thread-0
9 :Thread-0
Second time output:
0 :Thread-1
0 :Thread-0
1 :Thread-1
1 :Thread-0
2 :Thread-1
2 :Thread-0
3 :Thread-1
3 :Thread-0
4 :Thread-1
4 :Thread-0
5 :Thread-1
5 :Thread-0
6 :Thread-1
6 :Thread-0
7 :Thread-1
7 :Thread-0
8 :Thread-1
8 :Thread-0
9 :Thread-1
9 :Thread-0
爲什麼兩個輸出都不同。
我用加入()與Th1對象。當TH0運行和JVM發現TH1線程,以便線程1,應首先完成了,然後線程0。
爲什麼其在沒有任何序列打印線程1,線程0。如果輸出會是這樣的,那麼join()方法有什麼用處?
誰能請我解釋輸出。
那'th2.start();'應該是'th1.start();',正確? th/th0同樣的事情。 –