比较Sychronized和Lock

 

构成不同

synchronized是关键字,属于JVM层面

Lock是具体的接口(java.util.concurrent.locks.lock),属于api层面(一般我们使用它的实现类ReentrantLock)

 

使用方式

sychronized不需要用户手动释放锁,当sychronized代码执行完后系统会自动让线程释放对锁的占用

ReentrantLock需要用户手动去释放锁,若没有主动释放可能出现死锁的情况。

 

等待是否可中断

synchronized不可中断,除非抛出异常或正常运行完成

ReentrantLock可中断,可以设置超时方法trylock(TimeUnit unit)、可设置中断方法interrupt()中断

 

加锁是否公平

synchronized只能使用非公平锁

ReentrantLock两者都可以,可以设置参数true为公平锁,false或不填为默认非公平锁

 

锁绑定多个条件Condition

synchronized不能绑定多个条件,要么唤醒一个要么唤醒全部线程

ReentrantLock用来实现分组唤醒与精准唤醒,

你可能感兴趣的:([线程与并发])