如果我在Java中使用ReentrantLock ...當一個線程擁有對象的鎖定並且它試圖獲取另一個對象的另一個鎖定時,它會釋放第一個還是仍然存在拿住?Java中的嵌套監視器
1
A
回答
2
獲取新鎖不會釋放之前持有的任何鎖。你必須明確地發佈它們,通常在finally
區塊內。
但總是要小心同時獲取多個鎖。總是檢查你是否造成死鎖。
2
獲取鎖定不會導致線程釋放其已獲取的任何其他鎖定。 The API documentation for the Lock interface指出,Lock的實現可以保存多個鎖,並使用一種技術(手工鎖定),除非線程一次可以保存多個鎖(添加了重點),否則將無法工作(重點添加):
儘管同步方法和語句 的作用域機制使得使用監視器鎖編程變得更容易,並且有助於避免涉及鎖的許多常見編程錯誤,但有時您需要以更靈活的方式使用鎖來處理鎖。例如, 用於遍歷併發訪問的數據結構的一些算法 需要使用「交換」或「鏈鎖定」:您獲取節點A的鎖,然後節點B,然後釋放A並獲取C,然後 發佈B並獲取D等。 接口的實現允許通過允許在不同示波器中獲取和發佈鎖並允許以任何順序獲取和釋放多個鎖來使用這種技術。
由於ReentrantLock實現Lock,所以應該適用。
相關問題
- 1. Java動作監聽器嵌套循環
- 2. Java中的監視器類
- 3. 嵌套onClick監聽器
- 4. 嵌套的Matlab屬性監聽器
- 5. Java的系統監視器
- 6. 在Java中的MVC嵌套視圖
- 7. java線程中的「監視器」
- 8. Java中的進度監視器實現
- 9. Java中的同步類(即監視器)
- 10. NodeJS嵌套事件監聽器
- 11. Java網絡監視器
- 12. Java對象監視器
- 13. Java監視器實現
- 14. Java對象監視器
- 15. 嵌套視圖嵌套ViewModels
- 16. 嵌套TreeSet迭代器 - Java
- 17. openerp中的嵌套視圖
- 18. Ember中的嵌套視圖
- 19. jsf監聽器不會在嵌套的UI中調用:重複
- 20. windows上的Node.js nodemon不會監視嵌套的dirs?
- 21. UIViewController視圖中的iOS嵌套視圖控制器視圖?
- 22. Java中的嵌套枚舉
- 23. java中的嵌套類
- 24. java中的嵌套接口
- 25. java中的嵌套方法?
- 26. Java中嵌套的ActionListeners?
- 27. Java中的嵌套映射
- 28. 監視器的Spring Java應用
- 29. 作爲監視器的Java類
- 30. 嵌套視圖
是什麼讓你覺得它應該隱式釋放另一個呢? – 2015-02-11 17:22:13
我既不......也不關閉。 OP有問這個問題的原因.. – 2015-02-11 17:28:34
謝謝你的答案 – 2015-02-11 17:42:07