【发布时间】:2021-02-16 23:08:39
【问题描述】:
我有这个代码:
private volatile boolean immortal;
private Object lock = new Object();
public void set(boolean immortal) {
this.immortal = immortal;
}
public void kill() {
// .... contains some other code.
synchronized(lock) {
if (!immortal) {
for (int i = 0; i < numThreads; i++) {
runnableList.add(POISON_PILL);
}
}
}
}
我的用例是我希望 kill 方法中的 if 语句在 immortal 值更改之前运行完成。有没有更好的方法在不锁定对象的情况下做到这一点?
我的意思是,仅当布尔变量的值为 false 并且在运行完成之前不允许更改布尔值时,同步块的最佳方法是什么?我可以使用AtomicBoolean 来实现吗?
【问题讨论】:
-
“在运行完成之前不允许更改布尔值”-您当前的实现是否应该实现这一点?据我所知,没有什么能阻止其他线程在执行同步块期间更改
immortal。
标签: java concurrency synchronization atomic synchronized