synchronized和lock的区别

synchronized和lock的区别_第1张图片公平锁。syn是非公平锁,无法保证线程按照申请锁的顺序获得锁,而Lock锁提供了可选参数,可以配置成公平锁,也可以配置成非公平锁。通常来说,非公平锁的效率比公平锁要高。

可中断锁。一个线程使用syn获取锁,除非该线程成功获取到锁,否则将一直阻塞住。而Lock锁提供了lockInterruptibly()接口,提供了可中断的操作。
带超时时间的锁。Lock锁提供了tryLock(long time, TimeUnit unit)带超时时间的获取锁的接口,在等待指定时间后,如果获取不到锁,则放弃获取锁。
读写锁。syn是读写、读读、写写均互斥的,而ReadWriteLock则分别提供了读锁和写锁,使得读读可以并发执行。

自动释放锁。如果用syn加锁,当发生异常时(比方运行时异常),那么jvm会自动释放掉线程持有的锁,而lock锁则不会主动释放,除非调用了unlock接口,因此使用lock锁时有可能导致死锁。

在ReentrantLock上可以绑定多个Condition条件,也就是可以拥有多个等待队列,比如在实现生产者消费者的时候,使用一个队列(锁的队列)存放等待 队列(生产者消费者的队列)有元素的消费者,使用另一个队列(锁的队列)存放等待 队列not full的生产者,相比较synchronized和wait notify而言,避免了错误的唤醒生产者或者消费者的开销。

可重入锁。二者都是可重入的~

synchronized和lock以及synchronized和volatile的区别synchronized和lock的区别_第2张图片synchronized和lock的区别_第3张图片synchronized和lock的区别_第4张图片

你可能感兴趣的:(java基础)