好的,我刚刚读了这个问题你在 Java 中使用过 volatile 关键字吗?,并且我使用易失性变量来停止循环。我也看过这个参考资料,http://www.javamex.com/tutorials/synchronization_volatile.shtml。现在文章说易失性变量是非阻塞的。它还表示它不能用于读取-更新-写入序列中的并发。这是有道理的,因为它们是非阻塞的。
由于易失性变量永远不会被缓存,因此简单地使用同步来停止循环(来自前面的链接)是否更快?
编辑:使用同步解决方案
public class A{
private boolean test;
public A(){
test = true;
}
public synchronized void stop(){
test = false;
}
public synchronized boolean isTrue(){
return test;
}
}
public class B extends Thread {
private A a;
public B(A refA){
a = refA;
}
public void run(){
//Does stuff here
try{
sleep(1000);
}
catch(Exception e){}
a.stop();
}
public static void main(String [] args){
A TestA = new A();
B TestB = new B(TestA);
TestB.start();
while(TestA.isTrue()){
//stay in loop
System.out.println("still in loop");
}
System.out.println("Done with loop");
}
}
不,读一volatile
变量比读取非变量更快volatile
中的变量synchronized
block.
A synchronized
块清除条目上的缓存值,这与读取相同volatile
多变的。But,当退出同步块时,它还会将所有缓存的写入刷新到主内存,这在读取时是不必要的volatile
多变的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)