十二、java内存模型与线程
一、内存间交互操作
lock:作用于主内存中的变量
unlock:作用于主内存中的变量
read:作用于主内存中的变量
load:作用于工作内存中的变量
use:作用于工作内存中的变量
assign:作用于工作内存中的变量
store:作用于工作内存中的变量
write:作用于主内存中的变量
二、volatile
1、 可见性
java里面的运算并非原子操作,导致volatile变量的运算在并发下一样是不安全的。
不符合下列规则仍要加锁:
运算结果并不依赖变量的当前值,或者能够确保只有单一的线程修改变量的值。
变量不需要与其他的状态变量共同参与不变约束。
2、禁止指令重排序优化
三、原子性、可见性、有序性
原子性:read、load、assign、use、store、write
可见性:在变量修改后将新值同步回主内存,在变量读取主内存前刷新变量值,依赖主内存为传递媒介实现可见性、
有序性:在本线程内观察,所有的操作都是有序的
四、先行发生原则
程序次序规则:一个线程内
管程锁定规则:一个unlock操作先行发送于后面同一个锁的lock操作
volatile原则:
线程启动规则:
线程终止规则:
线程中断规则:
对象终结规则:
传递性:
五、java与线程
1、 线程的实现
使用内核线程实现
使用用户线程实现
使用用户线程加轻量级进程混合实现
2、线程调度方式
协同式
抢占式
3、线程状态转换