ReetrantLock和synchronized

3 阅读1分钟

ReetrantLock

  1. 它默认为非公平锁,设置为true可以为公平锁
  2. 他说jdk层面的Api
  3. 他的底层使用了AQS,AQS底层使用了CAS,FIFO,volatile
  4. 它是显示的,需要调用lock和unlock调用和释放锁
  5. 业务中需要细粒度的控制锁才使用它,
private final ReentrantLock lock = new ReentrantLock();

public void getMessage(){
    lock.tryLock();
    try {
        
    }finally {
        lock.unlock();
    }
}

trylock和lock区别: lock是阻塞等待,trylock是非阻塞等待

synchronized

  1. 他是jvm层面的,默认为非公平锁
  2. 他可以加在方法中,也可以作为一个代码块
  3. synchronized(this) 这个锁的是实例
编译类型 实例=new 运行类型()
  1. jdk1.6修改了底层的偏向锁,自旋锁等等(到这一步就OK了,没有必要在往下深究了)