2 回答

TA貢獻1797條經驗 獲得超6個贊
明顯的非答案:錯誤的設計點。線程不“擁有”資源。
線程只是“執行線程”。他們運行你告訴他們運行的代碼。因此,一個線程不擁有它來的任何對象。
因此,沒有內置機制可以幫助滿足您的要求。您必須自己實現一些東西,依賴于監控線程及其狀態。這將是一項艱巨且具有挑戰性的任務。主要是因為:多線程很難。
這里的嚴肅建議:從這個設計退后一步。而是考慮其他不同的方式來處理此類“資源”。

TA貢獻1788條經驗 獲得超4個贊
這確實是一種錯誤的做法。顯然,您可以像這樣在 finally 塊中鎖定對象并解鎖它:
private Lock lock = new ReentrantLock();
public void useObject() {
lock.lock();
try {
//do something with your resource.
}
finally {
lock.unlock();
}
}
這樣,如果運行 useObject 的線程終止,它將執行 finally 塊,并解鎖保護資源的鎖。
但是沒有辦法檢測線程沒有任何活動。如果線程被操作系統搶占,您將無從得知。那是在抽象層之下,你作為開發者,在操作。
如果您想更多地了解操作系統如何與線程一起工作,以及您不能做什么,您應該查看
Java 多線程、并發和性能優化
Udemy 上的課程。它還討論了如何正確使用正確的鎖來進行這種安全同步,并在您必須共享數據庫連接等資源時從應用程序中獲得最佳性能。
我希望它有幫助
添加回答
舉報