synchronized和Lock有什么区别(不看后悔,看了必懂)

版权声明:本文为博主原创文章,未经博主允许可以转载。 https://blog.csdn.net/qq_36071795/article/details/83890368

java语言中提供了两种锁机制来实现对某个共享资源的同步:synchronized和Lock.其中synchronized使用Object对象本身的notify,wait和notifyAll来实现线程之间的调度.而Lock可以使用Condition进程线程之间的调度

①用法不同

synchronized可以加在方法上,也可以加在特定的代码块中,括号中表示需要锁的对象

Lock需要显式地指定起始位置和终止位置

②性能不一样

JDK中增加了一个接口的实现类ReentrantLock.在资源竞争不是很激烈的情况下,synchronized的性能要优先于ReentrantLock,但是在竞争很激烈的情况下,synchronized的性能会下降得非常快,而ReentrantLock的性能几乎不变

③锁机制不一样

当synchronized获取多个锁时,必须以相反的顺序释放,并且是自动解锁;而Lock则需要开发人员手动释放锁,并且必须在finally块中释放,否则会引发死锁问题的发生

 

注意:虽然synchronized和Lock都可以实现多线程的同步,但是,最好不要同时使用这两种同步机制因为Lock和synchronized使用的锁机制不一样,所以它们的运行是相互独立的,在使用时互不影响

 

 

当一个线程进入一个对象的synchronized方法后,其他线程是否可以进入此对象的其他方法?

①如果其他方法是非synchronized方法,则可以

②如果其他方法是静态的synchronized方法,则可以,因为它使用的同步锁是当前类字节码

③如果其他方法是synchronized方法,但是内部调用了wait()方法,则可以

猜你喜欢

转载自blog.csdn.net/qq_36071795/article/details/83890368
今日推荐