首页技术文章正文

Synchronized和Reentrantlock的区别有哪些?

更新时间:2020-12-08 来源:黑马程序员 浏览量:

1577370495235_学IT就到黑马程序员.gif

ReentrantLock是Lock的实现类,是一个互斥的同步锁。从功能角度,ReentrantLock比Synchronized的同步操作更精细(因为可以像普通对象一样使用),甚至实现Synchronized没有的高级功能,如:

·等待可中断:当持有锁的线程长期不释放锁的时候,正在等待的线程可以选择放弃等待,对处理执行时间非常长的同步块很有用。

·带超时的获取锁尝试:在指定的时间范围内获取锁,如果时间到了仍然无法获取则返回。

·可以判断是否有线程在排队等待获取锁可以响应中断请求与Synchronized不同,当获取到锁的线程被中断时,能够响应中断,中断异常将会被抛出,同时锁会被释放。

·可以实现公平锁。

从锁释放角度, Synchronized在JVM层面上实现的,不但可以通过一些监控工具监控 Synchronized的锁定,而且在代码执行岀现异常时,JVM会自动释放锁定;但是使用Locκ则不行,Lock是通过代码实现的,要保证锁定一定会被释放,就必须将unlock()放到finally{}中。

从性能角度,Synchronized早期实现比较低效,对比ReentrantLock,大多数场景性能都相差较大。但是在Java 6中对其进行了非常多的改进,在竞争不激烈时,Synchronized的性能要优于ReetrantLock;在高竞争情况下,Synchronized的性能会下降几十倍,但是ReetrantLock的性能能维持常。



猜你喜欢

反射机制应用:DAO抽取通用层实现

ZooKeeper面试题和答案汇总

Dubbo相关面试题附答案

Java高级软件工程师培训课程

分享到:
在线咨询 我要报名
和我们在线交谈!