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

lock和synchronized的区别

时间:2018-04-03 19:11:48      阅读:127      评论:0      收藏:0      [点我收藏+]

标签:notify   接口   解决   总结   放弃   blog   try   不成功   定时   

与synchronized类似的,lock也能够达到同步的效果

Lock是一个接口,为了使用一个Lock对象,需要用到

Lock lock = new ReentrantLock();
 
 lock必须调用unlock方法进行手动释放,为了保证释放的执行,往往会把unlock() 放在finally中进行。
 
synchronized 是不占用到手不罢休的,会一直试图占用下去。
与 synchronized 的钻牛角尖不一样,Lock接口还提供了一个trylock方法。
trylock会在指定时间范围内试图占用,占成功了,就啪啪啪。 如果时间到了,还占用不成功,扭头就走
locked = lock.tryLock(1,TimeUnit.SECONDS);
 
使用synchronized方式进行线程交互,用到的是同步对象的wait,notify和notifyAll方法
Lock也提供了类似的解决办法,首先通过lock对象得到一个Condition对象,然后分别调用这个Condition对象的:await, signal,signalAll 方法
 
总结Lock和synchronized的区别:
 
1. Lock是一个接口,而synchronized是Java中的关键字,synchronized是内置的语言实现,Lock是代码层面的实现。

2. Lock可以选择性的获取锁,如果一段时间获取不到,可以放弃。synchronized不行,会一根筋一直获取下去。 借助Lock的这个特性,就能够规避死锁,synchronized必须通过谨慎和良好的设计,才能减少死锁的发生。

3. synchronized在发生异常和同步块结束的时候,会自动释放锁。而Lock必须手动释放, 所以如果忘记了释放锁,一样会造成死锁。

lock和synchronized的区别

标签:notify   接口   解决   总结   放弃   blog   try   不成功   定时   

原文地址:https://www.cnblogs.com/lspa/p/8710094.html

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