并发编程读书笔记20190424

1. 多线程并发访问共享变量,如果不进行访问控制,则会出现数据不一致问题。

2. 而控制访问的主要方法就是加锁,限制访问,比如synchronized,Lock。synchronized是对象锁,使用方便,控制粒度比较粗;Lock是专门的锁对象,需要主动加锁和释放锁,能更灵活的控制锁粒度和策略(常用可重入锁ReentrantLock,读写锁ReentrantReadWriteLock),性能会更高。

3. Lock->AbstractQueuedSynchronizer->Unsafe,Lock面向开发人员,Unsafe面向jvm,同步器AbstractQueuedSynchronizer实现了作为中间的桥梁,已封装了基本的锁处理机制,内部维护了一个FIFO同步队列存放竞争锁的线程,主要是通过volatile和CAS机制。

4. volatile保证了多线程之间属性的可见性,通过增加内存指令,指定本地内存更新后必须刷新到主内存,每次读取必须去主内存中读取。无法保证原子性。

ThreadLocal跟多线程无关,是为每个线程维护一个独立的变量,ThreadLocal将自己本身作为key,存储在当前线程的一个map中。常用于保持一个线程的变量传递,而无需通过方法参数。

你可能感兴趣的:(并发编程读书笔记20190424)