谈谈关于 Synchronized 和 lock,synchronize和lock使用区别

  谈谈关于 Synchronized 和 lock,synchronize和lock使用区别

  00-1010 1.从功能的角度来看。从特点3。从性能的角度来看

  00-1010Lock和Synchronized都是java中用来解决线程安全问题的工具。

  

目录

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只提供了不公平锁的实现。

  

1. 从功能角度来看

Synchronized和Lock在性能上差别不大,但在实现上会有一些差别。Synchronized引入了偏置锁、轻量级锁、重量级锁和锁升级的机制来实现锁优化,而lock则采用自旋锁的方式来实现性能优化。

 

  关于Java中Lock和Synchronized的区别,本文就讲到这里。关于Lock和Synchronized区别的更多信息,请搜索Popular IT以前的文章或继续浏览下面的相关文章。我希望你以后能更多地支持流行音乐!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: