通过引用文章,它使用一对volatile来防止乱序执行.我想知道,是否有可能使用单一易失性来阻止它?
void fun_by_thread_1() {
this.isNuclearFactory = true;
this.factory = new NuclearFactory();
}
void fun_by_thread_2() {
Factory _factory = this.factory;
if (this.isNuclearFactory) {
// Do not operate nuclear factory!!!
return;
}
// If out-of-order execution happens, _factory might
// be NuclearFactory instance.
_factory.operate();
}
Factory factory = new FoodFactory();
volatile boolean isNuclearFactory = false;
我问的原因是,因为我有一个单一的防护标志(类似于isNuclearFactory标志),以防止多个变量(类似于许多工厂).我不希望将所有工厂标记为易变.
或者,我应该落入以下解决方案?
void fun_by_thread_1() {
writer.lock();
try {
this.isNuclearFactory = true;
this.factory = new NuclearFactory();
} finally {
writer.unlock();
}
}
void fun_by_thread_2() {
reader.lock();
try {
Factory _factory = this.factory;
if (this.isNuclearFactory) {
// Do not operate nuclear factory!!!
return;
}
} finally {
reader.unlock();
}
_factory.operate();
}
Factory factory = new FoodFactory();
boolean isNuclearFactory = false;
P / S:我知道instanceof.工厂只是一个展示无序问题的例子.