ReetrantLock
- 它默认为非公平锁,设置为true可以为公平锁
- 他说jdk层面的Api
- 他的底层使用了AQS,AQS底层使用了CAS,FIFO,volatile
- 它是显示的,需要调用lock和unlock调用和释放锁
- 业务中需要细粒度的控制锁才使用它,
private final ReentrantLock lock = new ReentrantLock();
public void getMessage(){
lock.tryLock();
try {
}finally {
lock.unlock();
}
}
trylock和lock区别: lock是阻塞等待,trylock是非阻塞等待
synchronized
- 他是jvm层面的,默认为非公平锁
- 他可以加在方法中,也可以作为一个代码块
- synchronized(this) 这个锁的是实例
编译类型 实例=new 运行类型()
- jdk1.6修改了底层的偏向锁,自旋锁等等(到这一步就OK了,没有必要在往下深究了)