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

ReentrantLock与synchronized

时间:2018-04-19 10:33:56      阅读:157      评论:0      收藏:0      [点我收藏+]

标签:使用   lock   编码   因此   竞争   决定   str   不同   地方   

相同:ReentrantLock提供了synchronized类似的功能和内存语义。

 不同:

1.ReentrantLock功能性方面更全面,比如时间锁等候,可中断锁等候,锁投票等,因此更有扩展性。在多个条件变量和高度竞争锁的地方,用ReentrantLock更合适,ReentrantLock还提供了Condition,对线程的等待和唤醒等操作更加灵活,一个ReentrantLock可以有多个Condition实例,所以更有扩展性。

2.ReentrantLock必须在finally中释放锁,否则后果很严重,编码角度来说使用synchronized更加简单,不容易遗漏或者出错。

3.ReentrantLock 的性能比synchronized会好点。

4.ReentrantLock提供了可轮询的锁请求,他可以尝试的去取得锁,如果取得成功则继续处理,取得不成功,可以等下次运行的时候处理,所以不容易产生死锁,而synchronized则一旦进入锁请求要么成功,要么一直阻塞,所以更容易产生死锁。

5、Lock的某些方法可以决定多长时间内尝试获取锁,如果获取不到就抛异常,这样就可以一定程度上减轻死锁的可能性。

如果锁被另一个线程占据了,synchronized只会一直等待,很容易错序死锁 

6、synchronized的话,锁的范围是整个方法或synchronized块部分;而Lock因为是方法调用,可以跨方法,灵活性更大 

7、便于测试,单元测试时,可以模拟Lock,确定是否获得了锁,而synchronized就没办法了

ReentrantLock与synchronized

标签:使用   lock   编码   因此   竞争   决定   str   不同   地方   

原文地址:https://www.cnblogs.com/fengli9998/p/8879891.html

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