D2 线程间的通信
volatile
- 保证各个线程的可见性
- 子线程会从主线程加载成员变量,以期优化
wait和notify方法
- 当使用wait 和 notify 的时候 , 一定要配合着synchronized关键字去使用,final Object lock = new Object();
- wait 释放锁,notify不释放锁
- 弊端:notify 释放,不是实时释放锁。
CountDownLatch
- countDownLatch.countDown();
- countDownLatch.await();
AtomicInteger
模拟BlockingQueue
- 模拟阻塞的队列
线程里使用变量必须使用final进行修饰
ThreadLocal
- 用于存储当前线程相关的变量,用于无锁的设计,一个线程一个
- ConcurrentHashMap
单例
饥汉
- 使用静态内部类
饱汉
- 双重check