「我有一個XYZ類,我已經寫了兩個方法A和B,現在兩個線程在這個類的一個對象上運行,一個線程在A方法中,我希望只要第二個線程調用我的B方法,方法A中的線程應立即停止並出來,有人告訴我這個解決方案嗎?「立即停止線程作爲第二個線程需要訪問
回答
讓我直接回答你的問題,並告訴你爲什麼它是一個壞主意。
private Thread lastThread;
public void transferMoney(Account account, Account account2, int amount) {
Thread t = lastThread;
if (t != null)
t.stop(); // so another thread running this immediately on a random line.
lastThread = Thread.currentThread();
// lastThread could die here
if (account1.withdrawn(amount)) { // the withdraw was successful
// lastThread could die here
account2.deposit(amount);
}
// lastThread could die here
lastThread = null;
}
該代碼存在許多方面的缺陷,但是如果兩個線程輸入此方法,則第一個線程可能會停止。但是,它可能會使帳戶1缺少未轉移到帳戶2的資金。 (或更糟糕的)
簡而言之,讓一個線程殺死另一個線程是沒有意義的,事實上,您要儘量避免這種情況,所以以任何方式鼓勵它都不是好主意。
pstt,你做了lastThread final。很確定你不是這個意思。 – Dunes 2011-12-29 17:45:02
@彼得這是你的實現..有可能我們需要這種情況。謝謝你的回覆buddy – 2011-12-29 17:50:38
@peter我可以有你的電子郵件ID嗎? – 2011-12-29 17:58:51
- 1. 立即停止線程
- 2. 多線程暫停第二個線程
- 3. Android - 爲什麼第二個線程停止執行第一個線程?
- 4. 用第二個線程停止主線程
- 5. 立即終止裸露線程而無需中止或暫停
- 6. Java多線程停止所有其他線程立即
- 7. 立即終止線程
- 8. 如何在python中完成第二個線程時停止第一個線程?
- 9. 主線程從第二個線程訪問變量
- 10. 需要幫助來停止BackgroundWorker線程
- 11. 如果第二個線程等待第一個線程的終止,是否需要內存屏障?
- 12. 在Python 2.7中立即停止線程執行/終止
- 13. 即使使用ReentrantLock鎖定第一個線程,也執行第二個線程
- 14. Android onPause:爲什麼要停止線程?
- 15. 在Java中立即終止線程
- 16. 如何立即終止Parallel.ForEach線程?
- 17. 立即中止剩餘線程塊
- 18. 停止線程
- 19. 停止線程
- 20. 停止線程
- 21. PHP線程停止工作
- 22. Android:線程停止工作
- 23. 線程停止工作
- 24. 停止線程不工作
- 25. 我在爲多線程程序創建第二個線程時遇到問題
- 26. 如何在一段時間過後立即停止線程?
- 27. 如何在Java中立即停止線程
- 28. 每當發生異常時立即停止線程
- 29. 如何強制Jmeter服務器中的線程立即停止
- 30. 我可以立即停止運行.NET的線程:
所以你希望你的數據結構一旦出現競態條件就會被破壞?哦,這很容易:刪除所有的鎖。更嚴重的是:你確實解決了錯誤的問題:更多的上下文。 – Voo 2011-12-29 17:24:10
我認爲你沒有得到我的觀點我想在第二次嘗試輸入時立即停止第一個線程 – 2011-12-29 17:26:22
共享方法沒有問題,因爲它們沒有改變(或者你沒有看到它們改變;)問題只是共享可變數據。我不擔心哪些線程在運行哪些方法,而是擔心共享數據何時被更改。 – 2011-12-29 17:26:33