笔记:深入理解JVM 第五部分 高效并发 (第12、13章)

一、第12章 Java 内存模型

1、Java内存模型


内存间的交互操作:lock、unlock、read、load、use、assign、store、write


volatile 变量:保证变量对所有线程可见;禁止指令重排序优化。

long、double 特殊规则:允许将没有volatile修饰的64位数据操作分成两次32位数据操作。


Java内存模型的特性:

(1)、原子性:除了long和double,对基本类型数据访问都是原子的

(2)、可见性:一个线程修改了共享变量,其他线程能看到。通过volatile、synchronized、final实现。

(3)、有序性:本线程内看所有操作都是有序的, 即线程内表现为串行;线程外看本线程,所有的操作都是无序的,即指令重排序线程缓存与主内存同步延迟通过volatile、synchronized 可保证有序性。


2、Java线程

线程的实现: 通过操作系统的内核线程(轻量级进程)实现

线程的调度:采用抢占式调度

状态转换:New、Runnable、Waiting、Blocked、Teminated



二、第13章 线程安全和锁优化

1、线程安全

(1)、不可变:final

(2)、绝对线程安全:难以实现

(3)、相对线程安全:Vector、Hashtable、同步集合等

(4)、线程兼容:HashMap、ArrayList等

线程安全实现方法

(1)、互斥同步:synchronized 和 Lock

(2)、非阻塞同步:CAS

(3)、无同步方案:ThreadLocal



2、锁优化

(1)、自旋锁:就是一个空的while 循环。

(2)、锁消除

(3)、锁粗化

(4)、轻量级锁:CAS。

(5)、偏向锁:锁偏向于第一个获得它的线程。







原文地址:https://www.cnblogs.com/leeeee/p/7276176.html