# Java创建线程方式
# 线程池核心参数、创建方式、拒绝策略
# 线程各状态生命周期
# 线程池复用原理
# Synchronized和Lock锁区别
# CountDownLatch和CyclicBarrier
# ReentrantLock源码
# 锁的分类
# 悲观锁 和 乐观锁
悲观锁:在进入同步方法的时候都会获取当前同步锁对象,直到退出同步方法时才会释放同步锁对象。如果有线程A和线程B,同他们都会访问obj对象的同步方法。当线程A获取到obj对象的同步锁,在执行某些方法的时候,这时候线程B企图获取 obj对象的同步锁就会失败,这个时候必须等待,直到线程A释放掉 obj对象的同步锁,线程B才能执行obj的同步方法 java中的悲观锁是synchronized,AQS框架下的锁则是先尝试CAS乐观锁去获取,获取不到,才会转为悲观锁,如RetreenLock
乐观锁:乐观锁是一种读多写少,遇到并发写的性能可能会变低,每次去拿数据的时候都认为不会修改,所以不会上锁。java乐观锁基本都通过CAS操作实现的,cas是一种依赖系统指令集实现原子操作,比较当前变量值与预期值是否一样,如果相同就使用系统原语进行更新。
- 独占锁和共享锁