所以我的代码与此类似
synchronized(objectOne){ do stuff }
synchronized(objectTwo){ do stuff }
Run Code Online (Sandbox Code Playgroud)
这个问题是程序将等待锁定objectOne,即使锁定objectTwo可用.我正在试图做的是说:尽量同时锁定objectOne和objectTwo,并取其锁定你会首先对该锁做的东西.我想出了一个解决方案,但我认为它相当hacky,我想知道是否有人有更好的想法.
这是我的想法:启动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();
Run Code Online (Sandbox Code Playgroud)