【发布时间】:2020-09-06 05:52:49
【问题描述】:
public class TestMemVisbility {
static volatile int flag;
static int[] arr=new int[100000];
public static void main(String[] args) {
new Thread(new Runnable() {
@Override
public void run() {
while(flag==0) ;
for(int i=0;i<100000;i++)
if(arr[i]!=i) System.out.println("false");
}
}).start();
new Thread(new Runnable() {
@Override
public void run() {
flag=0;
for(int i=0;i<100000;i++)
arr[i]=i;
flag=1;
}
}).start();
}
}
据我了解,volatile 只能使自己(不是之前的常见变量)对其他线程可见。所以我想对其进行测试,但没有打印任何内容。
【问题讨论】:
-
你的主线程还在运行吗?还是说你的整个程序已经结束了?
-
我的主线程可以完成,但关键是'volatile'。答案已经发布在下面的 cmets 部分。
标签: java locking volatile barrier