码迷,mamicode.com
首页 > 其他好文 > 详细

ReentrantLock与Synchronized的区别

时间:2020-11-04 18:01:20      阅读:16      评论:0      收藏:0      [点我收藏+]

标签:线程   优先   操作   无法获得   维护   不可   时间   依次   没有   

相同点:

  (1)都是独占锁

  (2)都可重入(就是可以多次获取同一个对象或者类的锁,因为其父类AQS维护了一个同步状态status来计数重入次数,初始值为0,重复获得的时候就会一直+1,释放到0的时候才真正释放锁,而非重入锁就不会这样,当判断不是0的时候线程就阻塞了)

差别:

  (1):ReentrantLock是公平锁,就是在锁上等待时间最长的锁将优先获得锁。通过按照一定顺序得到和释放锁,可以让线程按顺序依次执行。

  (2):Synchronized自动加锁解锁,操作简单,但不灵活。ReentrantLock手动加锁解锁(次数需要一样,否则其他线程可能无法获得锁),不易操作,但灵活。

  (3):Synchronized不可响应中断,一个线程得不到锁就一直等着。ReentrantLock可以响应中断;得到锁的线程中断之后,等待锁的进程就可以获得该锁接着执行。

  (4):限时等待。ReentrantLock提供了可轮询的锁请求,可以通过tryLock(long timeout,TimeUnit unit)方法实现(),可以传时间参数,表示等待时间(如果timeout时间内没有获取锁就会返回false,然后去做其他事);如果不传参数,就会立即返回结果,如果返回失败,就会释放已经获得的锁,可以用来解决死锁问题。

ReentrantLock与Synchronized的区别

标签:线程   优先   操作   无法获得   维护   不可   时间   依次   没有   

原文地址:https://www.cnblogs.com/wzlm/p/13921288.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!