如果我已獲取多個鎖,我如何以原子方式釋放Set鎖?在Java中以原子方式釋放多個鎖
1
A
回答
2
由於鎖被視爲獨立對象(請參見this question),並且Java語言沒有(但據我所知)在它的JVM中提供了一個方法(它必須實現爲真正的原子方式)才能釋放一步就鎖定多個鎖,這根本不可能。
也許有可能重新設計你的應用程序,以便不再需要幾個鎖的原子發佈。 (也許你也可以給你更具體的問題的細節,我們可以得到更好的理解)
2
看看JDK中的java.util.concurrent包描述,也許你會發現合適的同步primitibe。您的問題中的信息不足以提供更具體的答案。
一個簡單的方法(但也許不是最有效的)是使用「uberLock」守護所有需要的鎖,如:
private final Lock uberLock = new ReentrantLock();
void lockAll() {
uberLock.lock();
try {
// call lock() on all needed locks
} finally {
uberLock.unlock();
}
}
5
我明白的是爲什麼你需要原子釋放出來。我可以理解,雖然這樣做的代碼將是一個奇怪的野獸 - 一種乾淨的方法是將它們隱藏在主鎖管理器後面的所有代碼中,並在其上進行同步。但是什麼代碼會關心兩個鎖一次被釋放,或者根本沒有?
相關問題
- 1. 以原子方式更新多個行
- 2. 在java中釋放鎖對象
- 3. Java - Thread.join()不釋放鎖
- 4. Java - 以原子方式處理文件
- 5. 以原子方式在System.Collections.Concurrent對象上執行多個操作?
- 6. 原子方式更新多個文件
- 7. Strongloop loopback:以原子方式鎖定模型實例
- 8. 如何在Linux中以原子方式創建鎖定的文件?
- 9. 多線程以及多進程的Java文件鎖定方式
- 10. Firebase:如何以原子方式更新多個資源?
- 11. 以原子方式查找和更新多個文檔
- 12. 什麼是正確的方式來釋放鎖在objective-c
- 13. 以原子爲單位抓取多個鎖
- 14. Java服務器不釋放連接鎖
- 15. 釋放互斥鎖。
- 16. IDirect3DDevice9釋放死鎖
- 17. 重入鎖釋放
- 18. SVN鎖不釋放
- 19. 釋放BufferedReader.readLine(),而用synchronized方法鎖定
- 20. 如何動畫滾動並以原子方式進行縮放?
- 21. 在Sybase ASE中未釋放的鎖
- 22. 在Qt中釋放文件鎖定
- 23. Java DAO模式多表原子事務
- 24. 在Java中發生崩潰時釋放鎖定
- 25. 釋放非原子拷貝設置器
- 26. Java是調用原子方法原子
- 27. 升級讀鎖而不釋放C++ 11中的第一個鎖?
- 28. 在Java中死鎖(用一個例子)
- 29. 是否可以在PostgreSQL中自動釋放鎖定?
- 30. 以原子方式從Redis數據結構中彈出多個值?
什麼鎖?文件系統?數據庫?信號燈?編碼你如何獲得它們也可能有用。 – soulmerge 2009-09-10 14:05:16