JMM 即 Java Memory Model,它定义了**主存(共享内存)、工作内存(线程私有)**抽象概念,底层对应着 CPU 寄存器、缓存、硬件内存、 CPU 指令优化等。
JMM体现在以下几个方面
退出不出的循环
static Boolean run = true;public static void main(String[] args) throws InterruptedException {new Thread(()->{while (run) {//如果run为真,则一直执行}}).start();Thread.sleep(1000);System.out.println("改变run的值为false");run = false;}Copy
为什么无法退出该循环
原子性
可见性
有序性
多线程下的指令重排会影响安全性
可以使用double-checked locking模型实现单例
以上的实现优点是:
但在多线程的情况下,上面的代码有问题
JDK1.5以后的版本的voltile才会有效
happens-before规则
线程对volatile变量的写,对接下来其他线程对该变量的读可见
线程start前对变量的写,对该线程开始后对该变量的读可见
线程结束前对变量的写,对其他线程结束的读可见,
上一篇:Linux c编程之TCP通信
下一篇:A*算法例子