だから私はこれに似たコードを持っています
synchronized(objectOne){ do stuff }
synchronized(objectTwo){ do stuff }
objectOne
これに関する問題は、 のロックが利用可能であっても、プログラムが のロックを待機することobjectTwo
です。私がやろうとしているのは、 と の両方をロックしてみてobjectOne
、objectTwo
どちらのロックを最初に取得しても、そのロックの処理を行うということです。私は解決策を思いつきましたが、それはかなりハッキーだと思います.誰かがより良いアイデアを持っているかどうか疑問に思っています.
ここに私の考えがあります: 2 つのスレッドを開始し、それぞれがロックを待機してから、メイン スレッドがCountDownLatchを待機します。したがって、次のような結果になります。
CountDownLatch latch = new CountDownLatch(2);
new Thread(new Runnable(){
public void run(){
synchronized(objectOne) { do stuff }
latch.countDown();
}).start();
new Thread(new Runnable(){
public void run(){
synchronized(objectTwo) { do stuff }
latch.countDown();
}).start();
latch.await();