JMM
提示:以下是本篇文章正文内容,下面案例可供参考
一、JMM是什么?
JMM指的是java 内存模型。
二、JMM可见性
1.代码
代码如下(示例):
import java.util.concurrent.TimeUnit;
/**
* 验证volatile的可见性
* 1.1假如int mumber=0; number 变量没有添加volatile关键字修饰
*/
public class Test {
public static void main(String[] args) {
myDate myDate = new myDate();
new Thread(()->{
System.out.println(Thread.currentThread().getName()+"\t updated number="+myDate.number);
//睡了8秒钟
try {
TimeUnit.SECONDS.sleep(8);
} catch (InterruptedException e) {
e.printStackTrace();
}
myDate.bigNumber();
System.out.println(Thread.currentThread().getName()+"\t updated number="+myDate.number);
},"a1").start();
while (myDate.number==0){
}
System.out.println("可见性触发");
}
}
class myDate {
int number=0;
public void bigNumber(){
number=20;
}
}
没有打印 可见性触发 程序一直在while 循环
2.加入在 int number 前面加入volatile关键字
代码如下(示例):
volatile int number=0;
打印了 可见性触发 程序停止了