3. JAVA并发
Java内存模型JMM
JMM本身是一种抽象的概念,它描述的是一组规范,定义了程序中各个变量的访问
方式。
JVM中主内存
JAVA所有变量都存在主存中,对于所有线程进行共享
工作内存
线程有自己的工作内存,保存主存某些变量的拷贝
规定
线程解锁前,必须把共享变量的值刷新回主内存
线程加锁前,必须读取主内存的最新值到自己的工作内存
加锁解锁是同一把锁
线程对变量的操作发生在工作内存
线程之间不能直接相互访问,变量在程序中传递依赖主存来完成
线程如何通信
消息传递
共享内存(java线程通信采用的是这个):锁机制
(wait,notify,volatile,countdownlatch,cyclicBarrier),信号量机制,信号机制;
JMM并发三大特性:可见性,原子性,有序性
可见性(重点volatile)
线程之间的可见性,一个线程状态的修改对另一个线程是可见的
JMM通过变量修改后将新值同步回主内存,变量读取前从主内存刷新变量值
依赖主内存作为媒介方法是实现可见性
volatile可以保证变量的可见性,但不能保证原子性
原子性(重点各种锁)
一个操作或多个操作要么全执行,要则就都不执行
synchronized块之间的操作就具备原子性
有序性
执行的顺序按照代码的先后顺序执行
JMM中程序天然有序性
如果在本线程内观察,所有操作都是有序的(线程内为串行)
如果在一个线程中观察另一个线程,所有操作都是无序的(指令重排,工作内
存主内存同步延迟)
有序性的语义:
保证多线程运行的串行顺序
评论0