Synchronized和lock区别是什么?

首先呢我们要知道:

synchronized是java中的一个关键字,而Lock是一个接口

 

 

 

synchronized的作用域是

  1. 用在某一个对象上,如:synchronized (this)
  2. 用在方法上,如:public synchronized void run() {}
  3. 用在上,如:synchronized (SynchronizeDemo.class) {}、public synchronized static void method() {}

lock只能给方法上锁

注意:Lock要定义成static静态全局变量,而不能定义在这个方法里面,这样才能保证每个调用这个方法的线程用的是同一个锁,才能保证代码同步执行

 

synchronized 不需要手动获取锁和释放锁,使用简单,发生异常会自动释放锁,不会造成死锁;

lock需要自己加锁和释放锁,如果使用不当没有unLock()去释放锁就会造成死锁。

 

Lock更加灵活,里面有很多的方法可以调用,例如tryLock(尝试上锁),lockInterruptibly(看看有没有被中断),lock(上锁),unlock(释放锁)等方法

通过Lock可以知道有没有成功获取锁,而synchronized却无法办到。

 

 

 

 还有就是Lock提供了公平锁

  • 公平锁:加锁前先查看是否有排队等待的线程,有的话优先处理排在前面的线程,先来先得
  • 非公平所:线程加锁时直接尝试获取锁,获取不到就自动到队尾等待。
posted @ 2022-03-15 10:21  Nickeyhu  阅读(477)  评论(0编辑  收藏  举报