lock和synchronized的区别

Posted lspa

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了lock和synchronized的区别相关的知识,希望对你有一定的参考价值。

与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的区别的主要内容,如果未能解决你的问题,请参考以下文章

Synchronized和lock的区别和用法

Java同步锁——lock与synchronized 的区别转

synchronized 与 lock 的区别

关于synchronize与lock的区别

深入研究 Java Synchronize 和 Lock 的区别与用法

lock与synchronized的区别