問題 - 創建N個線程(例如3,名稱可以是線程1,線程2,線程3),它將以相反順序說HelloWorld,即第一線程-3會說HelloWorld,然後是Thread-2,然後是Thread-1。join()方法在我實現的代碼中無法正常工作
解決方法 - 上述問題可以通過各種方式解決,如使用易失性標誌來指示哪個線程必須運行或使用連接方法(以便線程1完成依賴於線程3上的線程2和線程2 )。 我想通過連接方法來解決這個問題。但它沒有給我適當的結果。請幫幫我。下面是我的程序 -
Thread [] previosThread = {null};
int[] previousIndex = {0};
for (int i=3; i>=1; i--) {
int currentIndex = i;
System.out.print("PreviousIndex--"+previousIndex[0]+" ; ");
System.out.println("CurrentIndex--"+currentIndex);
Thread newThread = new Thread("Thread-"+i) {
public void run() {
if(previousIndex[0]!=0 && previousIndex[0]==currentIndex+1) {
try {
previosThread[0].join();
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
System.out.println(this.getName()+" is saying HelloWorld!!");
}
};
previosThread[0] = newThread;
previousIndex[0] = currentIndex;
newThread.start();
}
上述程序是給不確定的輸出像下面 -
PreviousIndex - 0; CurrentIndex - 3 PreviousIndex - 3; CurrentIndex - 2 PreviousIndex - 2; CurrentIndex - 1 線程2在說HelloWorld !! 線程1在說HelloWorld! 線程3在說HelloWorld!
啓動一個線程需要很少的時間。你的循環很可能會在任何*線程實際進入run()方法之前完成,所以'previosThread [0]'引用* last *線程。所有3個線程都會看到最後一個值。 – Andreas
@安德里亞斯:非常感謝。你解決了我的問題。 :) – malviyarahuljayendra