使用countDownLatch的问题
来源:12-6 重排序1

慕工程9182859
2021-11-25
CountDownLatch latch = new CountDownLatch(1);
Thread one = new Thread(new Runnable() {
@Override
public void run() {
a = 1;
try {
latch.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
x = b;
}
});
Thread two = new Thread(new Runnable() {
@Override
public void run() {
b = 1;
try {
latch.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
y = a;
}
});
two.start();
one.start();
latch.countDown();
one.join();
two.join();
老师我改了latch.await();写的位置,这样不就意味着,a和b都已经被赋值1了然后被卡住,为什么还会出现1,0的情况
写回答
2回答
-
蒙奇D鸣人
2022-01-05
感觉有多种可能;main执行把countDown执行完了,2个子线程还没执行await方法,这样并发工具类无效,与没加一样,可能会出现1,0的情况;第二可能是可见性原因造成的;在第二个线程的local memory中a还是0;不知道这样理解对不对。
012022-01-06 -
悟空
2021-11-25
latch初始化只有1,new CountDownLatch(1);
另外,需要完整代码,目前我不知道你打印的是什么,是a b还是 b a
022021-11-27
相似问题