JMM内存模拟图
Java虚拟机(jvm)是一个实现了跨平台的虚拟系统,因此它也有自己的内存模型,即Java内存模型(Java Memory Model, JMM)
JMM三大特性
1.可见性
线程与线程之间的工作内存相互不可见, 不可以直接访问其他线程的工作内存、线程操作变量后存在写回到主内存延迟问题. 保证了可见性、线程操作变量后, 立刻将最新的变量值同步回到主内存中.线程使用变量 之前, 从主内存中获取最新变量的值(线程正在使用变量, 无法获取主内存中最新的值)、但是可见性不能解决线程安全问题
2.有序性
多线程执行时, 编译器, 处理器会对指令进行重新排序, 目的提高执行效率, 可能造成结果不正确、保证有序性、添加内存屏障(一组cpu指令), 防止重新排序
3.原子性
多线程执行时, 同一时刻只能一个线程操作, 该线程操作完, 其它线程中的一个线程进行操作, 以此类推
使用volatile可以解决可见性与有序性 但不能解决原子性
同步锁既可以解决可见性与有序性、还可以解决原子性 同步锁: synchronized
线程生命周期图
线程生命周期从新建到死亡共包含五种状态:
新建状态、就绪状态、运行状态、阻塞状态、死亡状态