Synchronized和Lock哪个更好,synchronized跟lock有什么区别
简介:锁和同步的区别
1\.从功能上看,Lock和Synchronized都是java中用来解决线程安全问题的工具。
2\.从特性上看,Synchronized是java中的同步关键字,Lock是J.U.C中提供的接口,这个接口有很多实现类,包括ReentrantLock。Synchronized可以通过两种方式控制锁的强度。
一个是在方法层面修饰synchronized关键字,一个是修饰代码块。锁的范围可以由同步锁对象的生命周期来控制。如果锁对象是静态对象或类对象,则锁是全局锁。如果锁对象是通用实例对象,则锁的范围取决于实例的生命周期。锁中锁的粒度是由它提供的lock()方法和unlock()方法决定的。
如图,Lock()方法和unlock()方法之间的代码可以保证线程安全,锁的范围取决于锁实例的生命周期。锁的灵活性高于同步的灵活性。Lock可以自主决定何时加锁,何时解锁。它只需要调用lock()和unlock方法。Lock还提供了一个非阻塞方法来竞争锁,称为tryLock()。该方法可以通过返回true/false来告诉当前线程其他线程是否已经在使用该锁。
Synchronized是关键字,所以不能实现无阻塞竞争锁的方法。Synchronized lock的释放是被动的,只有在Synchronized代码块被执行,或者代码异常时才会被释放。锁提供了公平锁和不公平锁的机制。公平锁意味着当线程竞争锁资源时,其他线程已经在排队了。或者等待锁被释放,那么当前竞争锁的线程就不能插队。不公平锁意味着无论是否有线程在排队等待锁,它都会尝试竞争一次锁。Synchronized只提供了不公平锁的实现。
3\.从性能方面来说,Synchronized和Lock在性能上差别不大,但是在实现上会有一些差别。Synchronized引入了偏置锁、轻量级锁、重量级锁和锁升级的机制来实现锁优化,而在lock中,使用自旋锁来实现性能优化。
版权归作者所有:原创作品来自博主小二上九8,转载请联系作者取得转载授权,否则将追究法律责任。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。