Lock与synchronized的区别

显示锁(Lock类)和内部锁(synchronized关键字)


一、显示锁的锁定和释放必须放在一个try---finally块中

二、Lock支持更细粒度的锁控制

//可重入的读写锁
private final ReentrantReadWriteLock rw = new ReentrantReadWriteLock ()

//读锁
private final Lock r = re.readLock()

//写锁
private final Lock w = rw.writeLock()

三、Lock是无阻塞的,synchronized是阻塞的

当线程A持有锁时,线程B也期望获得锁,此时,如果程序中使用的是显示锁,则B线程为等待状态,若使用的是内部锁为阻塞装填

四、Lock可以实现公平锁,synchronized只能是非公平锁

什么叫非公平锁呢,当一个线程A持有锁,线程B、C处于阻塞状态,当线程A释放锁时,JVM将从B或C中随机的选择一个,公平锁是选择时间最长那个

五、Lock是代码级别的,synchronized是JVM级别的

Lock是通过代码实现的,synchronized是在运行期有JVM解释的


你可能感兴趣的:(synchronized,Lock,区别)