-1
A
回答
1
從你的問題我summise,你想要做什麼Thread.join()
不使用Thread.join()
但使用Semaphore
。我可以考慮一些你可能想要這樣做的原因,但我覺得你可能只是想用join()
。然而,在這裏。
讓我們先從什麼join()
不 - 摘自的javadoc
Waits for this thread to die
通過它我們可以假定它意味着停止運行。好的,我們需要的是一個Semaphore
,有一個許可證,當線程死亡時釋放。讓我們假設你可以修改有問題的兩個線程,即它們不是最終的。然後,您可以重寫其run
方法,使得第一版本中,當它完成的信號和信號量第二等待被釋放它即
final Semaphore sem = new Semaphore(1);
Thread t1 = new MyThreadOne(){
{
try{
sem.acquire();
}
catch(InterruptedException e){ log(...); }
}
@Override
public void run(){
super.run();
sem.release();
}
};
Thread t2 new MyThreadTwo(){
@Override
public void run(){
try{
sem.acquire();
}
catch(InterruptedException e){ log(...); }
super.run();
}
};
t1.start();
t2.start();
你可能想通過信號開始到構造,如果之前你示例需要它,或者以其他方式訪問它。請注意0在這裏必須是final
,因爲它在匿名內部類中被引用,並且Java不會正確執行閉包。
相關問題
- 1. 如何不定期更改信號值?
- 2. 再入信號量
- 3. 如何將輸入信號更改爲systemverilog中的參數?
- 4. GtkEntry文本更改信號
- 5. QtPropertyBrowser和值更改信號
- 6. 更改信號中的ReferenceLoopHandlingR
- 7. Python:構建可重入信號量(結合RLock和信號量)
- 8. 如何更改用戶輸入變量?
- 9. 如何加速iPhone DTMF信號撥號
- 10. 如何更改CD ROM信?
- 11. 等待/信號(信號量)如何實現僞代碼「工作」?
- 12. 更改信號量的所有權/權限
- 13. 在Fortran中捕獲信號時更改變量值
- 14. 如何更改端口號
- 15. Java - 如何修改信號量實現,以便公平
- 16. 如何更改SWT樹加號/減號圖標
- 17. Ruby信號量?
- 18. 如何使用numpy更改pyaudio中的信號幅度?
- 19. 更改電話號碼發短信
- 20. iPad方向更改返回SIGABRT信號
- 21. 通過QPushButton信號更改QLabel setPixmap()
- 22. 更改信號插槽連接順序
- 23. django信號與批量刪除/更新
- 24. 如何用聲卡測量5V信號
- 25. 如何實現全局信號量類
- 26. 如何實現分佈式信號量?
- 27. Atmega測量的信號頻率如何?
- 28. 如何取回的信號量
- 29. Golang:如何超時信號量?
- 30. Linux進程間可重入信號量
你想看看join()做了什麼或者你想讓你的線程等待其他線程完成嗎? –
@Kamen,我想停止線程,直到其他不會結束 –
你有t1和t2。 t1應該等待t2完成。所以在t1應該等待的地方寫下t2.join()就是這樣。執行將停止在該行,直到t2完成。 –