機能で 2 つのオブジェクトをロックする必要があり、現在のコードは次のようになります。
Object obj1 = ...//get from somewhere
Object obj2 = ...//get from somewhere
synchronized(obj1){
...//blah
synchronized(obj2){
...//blah
}
}
ご覧のとおり、これは、別のスレッドがこのコードを obj1 と 2 を逆にして実行した場合のデッドロックの単純明快なレシピです。
concurrency-utils ロックを使用してこの状況を回避する方法はありますか?
オブジェクトとそのロックのマップを維持し、それらが利用可能かどうかを確認することを考えていましたが、ロックの順序を予測する明確な方法を思いつくことができないようです.