目录
一、Java内存模型
在谈及线程安全前,需要了解内存模型一下
Java内存模型
(Java Memory Model,JMM)是一种抽象的概念,JMM并不真实存在,它是一种规范
,规定了
在Java并发编程中如何处理多线程之间的内存交互,程序中变量在内存中的访问方式
JMM的核心概念
1、主内存与工作内存:
主内存:
是所有线程共享的内存区域,
所有变量都存储在主内存中,主内存是共享的
工作内存:
每个线程都有自己的工作内存(局部变量存储区),线程对共享变量的所有操作都发生在工作内存中,然后同步回主内存
这种模型允许线程在本地缓存共享变量的副本,提高性能,但也带来了同步的复杂性
2、内存屏障
内存屏障(Memory Barrier)是JMM中用于控制内存访问顺序的指令。它确保指令序列中的内存读写操作按照特定的顺序执行,从而保证线程间的内存可见性和有序性
3、Happens-Before规则
Happens-Before是JMM中最核心的概念之一,它定义了一组偏序关系,用于判断两个操作之间的内存可见性和有序性,用于描述多线程程序中操作的执行顺序,确保了线程之间的正确通信和数据一致性
简而言之:如果在同一个线程中,操作A在操作B之前执行,那么我们说一个操作A happens-before 另一个操作B,那么A的执行结果对B是可见的,且A的执行顺序排在B之前,也就是先执行的操作的结果必须对后执行的操作可见
用一个例子来深入了解内存模型