深入理解并发可见性,有序性,原子性和JMM内存模型
2023-07-03 11:50:24 5 举报
深入理解并发可见性,有序性,原子性和JMM内存模型
作者其他创作
大纲/内容
并发三大特性
原子性
一个操作或多个操作,要么全部执行且在执行过程中不被任何因素打断,要么全部不执行。在java中,对基本数据类型的变量的读取和赋值操作是原子性操作(64位处理器)。不采取任何的原子性保障措施的自增操作并不是原子性的,比如i++
如何保证原子性
通过synchronized关键字保证原子性
通过Lock锁保证原子性
通过CAS保证原子性
可见性
当多个线程访问同一个变量时,一个线程修改了这个变量的值,其他线程能够立即看得到修改的值
如何保证可见性
通过volatile关键字保证可见性
通过内存屏障保证可见性
通过synchronized关键字保证可见性
通过Lock锁保证可见性
有序性
程序执行的顺序按照代码的先后顺序执行,为了提升性能,编译器和处理器常常会对指令做重排序,存在有序性问题
如何保证有序性
通过volatile关键字保证有序性
通过内存屏障保证有序性
通过synchronized关键字保证可见性
通过Lock锁保证有序性
JAVA内存模型的抽象结构
java线程之间的通信由java内存模型(java Memory Model,简称JMM)控制,JMM决定一个线程对共享变量的写入何时对另一个线程可见
根据JMM的规定,线程对共享变量的所有操作都必须在自己的本地内存中进行,不能直接从主内存中读取
JMM通过控制主内存与每个线程本地内存之间的交互,为java程序提供内存可见性的保证
java中内存可见性底层的两种实现
内存屏障(synchronized,Thread.sleep(),volatile)
cpu上下文切换(Thread.yield(),Thread.sleep(0))
0 条评论
下一页