面试知识点-JUC

# 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是一种依赖系统指令集实现原子操作,比较当前变量值与预期值是否一样,如果相同就使用系统原语进行更新。

  • 独占锁和共享锁

# 可重入锁 和 不可重入锁

# 公平锁

# Synchronized锁的优化

# 轻量锁

# 偏向锁

# 轻量锁 和 偏向锁的状态转换