Java线程通信
Java中线程和线程之间是没法通信的,也就是不可见性。
class Data{
int number=0;
public void addTo60(){
this.number = 60;
}
}
public class Main {
public static void main(String[] args) {
Data data = new Data();
new Thread(()->{
System.out.println(Thread.currentThread().getName()+" come in");
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
data.addTo60();
System.out.println(Thread.currentThread().getName()+ "updated value"+data.number);
},"t1").start();
System.out.println("程序死循环啦");
while (data.number == 0){
}
System.out.println(data.number);
}
}
这段代码有main和t1两个线程,执行顺序是main先执行t1后执行,可以说是同时执行,main会进入死循环,3秒后t1线程把number改为60,死循环依然存在,这就是线程之间不可见性
输出结果
程序执行过程
解决方案
下篇文章: Java内存模型可见性之volatile(三).