来自《java并发编程的艺术》
第二章个人总结:
1 volatile 修饰符的使用;
用于修饰变量;
使用建议:在两个或者更多的线程访问的成员变量上使用volatile。当要访问的变量已在synchronized代码块中,或者为常量时,不必使用。
使用优化:
2 synchronized的实现原理;
无锁状态,偏向锁状态,轻量级锁状态,重量级锁状态
CAS竞争锁机制
偏向锁初始化流程,偏向锁撤销流程
轻量级锁膨胀流程(膨胀为重量级)
锁的优缺点:偏向锁,轻量级锁,重量级锁
3 原子操作的实现原理;
cpu怎样实现原子性操作?
java如何实现原子性操作?
使用循环CAS实现
CAS实现原子操作的三大问题:ABA问题,循环时间长开销大,只能保证一个共享变量的原子操作
第四章-重点
1.为什么使用多线程
1 更多处理核心
2 更快响应时间
2.线程优先级
涉及到cpu时间片的概念,时间片分配的越多说明当前线程优先级越高;
3.线程状态与状态之间的转换
4.Daemon线程
5.线程间通信
此处涉及jvm内存相关内容
volatile与synchronized
等待与通知机制
管道输入输出流
ThreadLoacl的使用:
线程变量,是一个以ThreadLocal对象为键、任意对象为值的存储结构;
ThreadLocal内部代码分析
6.线程池技术
第五章 java中的锁
1.Lock接口
2.队列同步器
Lock的内部实现
队列同步器基本结构及同步流程
FIFO先进先出队列结构
独占式同步状态与共享式同步状态的获取与释放
基于CAS实现线程安全机制
3.重入锁
可重复进入获取同步状态/锁的排它锁
4.读写锁
可以拆分理解,分解为读锁与写锁;读锁可以理解为共享锁,支持多个读操作的线程同时获取锁;写锁可以理解为排他锁,独占同步状态;当前线程获取到写锁时,其他不论写锁或者读锁线程都无法获取到锁;
获取读锁时如何保证线程安全? 与内部的队列同步器实现有关
5.LockSupport工具
6.condition
第六章 并发编程框架