正在编写示例应用程序以了解易失性行为。 根据我这个变量的值应改为50
,但我得到的输出是10
。易失性密钥未按预期工作
主要方法:
public class Volatile {
public static void main(String[] args) {
ShareObj so = new ShareObj();
Thread1 t1 = new Thread1(so);
Thread2 t2 = new Thread2(so);
t1.start();
t2.start();
System.out.println(so.a);
}
}
类:
class ShareObj {
public volatile int a =10;
}
class Thread1 extends Thread {
ShareObj so;
Thread1(ShareObj so) {
this.so = so;
}
public void run() {
so.a += 10;
System.out.println(so.a);
}
}
class Thread2 extends Thread {
ShareObj so;
Thread2(ShareObj so) {
this.so=so;
}
public void run() {
so.a+=10;
System.out.println(so.a);
}
}
我期待的输出是50
但10
。
有什么建议吗?
一方面,在'main'运行'System.out.println(so.a);'(因为启动一个线程比打印某个东西慢)'时,你的线程可能没有运行一个语句 – immibis
为什么你期望50? – Eran
注意在这个例子中,在实践中你可能会得到相同的结果或不具有不稳定性。 – immibis