在本教程(链接)中,关于Java的易失性声明,据说易失性声明可以替代同步。
作者使用易失性声明的示例:
volatile boolean shutdownRequested;
...
public void shutdown() { shutdownRequested = true; }
public void doWork() {
while (!shutdownRequested) {
// do stuff
}
}我对同步的天真实现应该是:
volatile boolean shutdownRequested;
...
synchronized public void shutdown() { shutdownRequested = true; }
synchronized public void doWork() {
while (!shutdownRequested) {
// do stuff
}
}如果线程A在线程B已经调用并正在运行shutdown时调用doWork,那么线程B似乎会持续锁定执行,因为它是一个循环。这似乎没有给线程A访问布尔值的机会。作者想到了什么作为可变声明的同步替代方案?
https://stackoverflow.com/questions/40199967
复制相似问题