小编use*_*426的帖子

如何在Java中没有排序约束的情况下获取多个锁?

所以我的代码与此类似

synchronized(objectOne){ do stuff }
synchronized(objectTwo){ do stuff }
Run Code Online (Sandbox Code Playgroud)

这个问题是程序将等待锁定objectOne,即使锁定objectTwo可用.我正在试图做的是说:尽量同时锁定objectOneobjectTwo,并取其锁定你会首先对该锁做的东西.我想出了一个解决方案,但我认为它相当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)

java concurrency locking

9
推荐指数
1
解决办法
688
查看次数

标签 统计

concurrency ×1

java ×1

locking ×1