在高度併發的系統中,可能很難確信您的鎖的使用是正確的。具體而言,如果在另一個線程中以正確的順序獲取鎖而獲取的順序不是預期的順序,則會導致死鎖。在Java中聲明同步的順序
有一些工具(例如Coverity)可以在代碼庫上進行靜態分析並尋找「異常」的鎖定順序。我想探索其他選擇來滿足我的需求。
是否有任何輕量級*工具可用於檢測Java代碼,這些工具可以檢測到以預期以外的順序獲取鎖的情況?我可以通過註釋/註釋顯式調用鎖定命令。
首選免費和/或開源解決方案。請同時評論這個問題是否存在非儀器方法。
*對於我而言,重量輕是指...
- 如果是儀表,我仍然可以使用相同的球場性能運行我的程序。我想,30-50%的降解是可以接受的。
- 我不必花半天的時間與工具進行交互,只是爲了獲得「好的」。理想情況下,我應該只注意到在出現問題時我正在使用它。
- 如果是儀表,應該很容易在生產環境中禁用。
- 它不應該在每個
synchronize
聲明中混淆我的代碼。如前所述,我可以明確地評論/註釋被相對排序鎖定的對象或類的對象。
...這就是爲什麼Actor模型和STM越來越流行 – 2010-10-28 20:32:34
有人有一個引用java.lang.Thread.holdsLock(Object)的響應被及時刪除。我無法自己找到這種方法,謝謝你的指點。不過,我的問題依然存在。 – 2010-10-28 20:48:37
你有沒有發現任何像樣的事情?我在C++中有非常複雜的死鎖檢測代碼,在我的情況下,我想用我們的Java代碼來捕獲在C++和/或java端的鎖可能會相互干擾並導致死鎖的情況。 – Pavel 2015-01-27 02:32:35