Java中对象锁和类锁的区别


在多线程环境中,两个或多个线程可以同时访问共享资源,这可能导致系统行为不一致。Java使用锁的概念来限制对共享资源或对象的并发访问。锁可以在两个级别上应用:

  • 对象级锁 - 当您希望仅允许一个线程访问非静态方法或代码的非静态块时,可以使用它。
  • 类级锁 - 当我们想要防止 多个线程在运行时进入任何可用实例的同步块时可以使用它。它应该始终用于使静态数据线程安全。 
序号
关键点
对象级锁
类级锁

1

基本

当您希望仅允许一个线程访问非静态方法或代码的非静态块时,可以使用它

当我们想要防止多个线程在运行时进入任何可用实例的同步块时可以使用它

2

静态/非静态

它应该始终用于使非静态数据线程安全。

它应该始终用于使静态数据线程安全。


3

锁的数量

类的每个对象可能都有自己的锁

可能存在多个类的对象,但始终只有一个类的类对象锁可用

类级锁示例

public class ClassLevelLockExample {
   public void classLevelLockMethod() {
      synchronized (ClassLevelLockExample.class) {
         //DO your stuff here
      }
   }
}

对象级锁示例

public class ObjectLevelLockExample {
   public void objectLevelLockMethod() {
      synchronized (this) {
         //DO your stuff here
      }
   }
}

更新于:2020年1月21日

6000+ 浏览量

启动你的职业生涯

完成课程获得认证

开始学习
广告