线程类代码如下 :
public class TTTT implements Runnable{
//返回值
private int returnVal = 0;
//标志位
private volatile int isOk = 0 ;
public void run() {
isOk = 1;
returnVal = 99;
}
public int getReturnVal() {
while(true){
if(isOk == 1){
break;
}
}
//我的想法,这里应该是 == true
if(returnVal == 0){
System.out.println(0);
}
return returnVal;
}
}
main方法:
public class test {
public static void main(String[] args) {
TTTT task = new TTTT();
//线程t将会执行run方法
Thread t = new Thread(task);
t.start();
//主线程执行getReturnVal
System.out.println(task.getReturnVal());
}
}
此时volatile修饰的isOk对于主线程是可见的 , 所以while循环跳出,输出结果为99
问题:变量returnVal并没有使用volitale修饰 , 为什么输出结果不是 0
名字居然差不多,猿粪呐。运行下面的代码,你可以看出,是有0打印出来的,没加volatitle只是说明不保证可见性,并不是没有可见性。