AtomicInteger
- ABA:狸猫换太子
- 解决:理解院子引用+新增机制(版本号,类似时间戳)
锁
- 公平锁和非公平锁 - 并发包中的 ReentrantLock
- 指定构造函数的boolean获得,默认非公平锁
- 公平:多线程按申请所得顺序获取锁,先来后到
- 非公平:多线程获取所得顺序不按照申请顺序,可能后申请的线程比先申请的线程游戏拿货去锁,如果尝试失败,再采用公平锁方式。高并发时,可能造成优先级翻转或饥饿线象。吞吐量比公平锁大。
- synchronized 是非公平锁
- 可重入锁(递归锁)
code interview.thread.ReentrantLockDemo
1. 概念:同一线程外层函数获得锁之后,内层递归函数仍然能获取该所的代码。同一线程在外层方法获取锁后,进入内层方会自动获取锁。即,线程可进入任何一个他已经拥有的锁所同步者的代码块。
2. ReentrantLock/Synchronized 是可重入锁
3. 作用:避免死锁
- 自旋锁
code interview.thread.SpinLockDemo
1. 基于:unsafe类 + CAS(compare and set)
2. 概念:尝试获取锁的线程不会阻塞,采用循环方式获取锁,好处是减少线程上下文切换的消耗,缺点是循环会消耗CPU
- etc
code interview.thread.ReadWriteLockDemo
1. 独占锁:该锁一次只能被一个线程持有。ReentrantLock、Synchronized都是独占锁。
2. 共享锁:该锁可被锁个线程持有。
3. ReentrantReadWriteLock:读是共享锁,写是独占锁。该锁的共享锁保证并发读是高效的,读读可共存,读写、写读、写写过程互斥。