Java 中对象级锁和类级锁的区别

javaobject oriented programmingprogramming

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

  • 对象级锁 − 当您希望非静态方法或非静态代码块只能由一个线程访问时,可以使用它。
  • 类级锁 − 当我们想要防止多个线程在运行时进入所有可用实例中的任何一个中的同步块时,可以使用它。应始终使用它来确保静态数据线程安全。 
Sr.编号
密钥
对象级锁
类级锁

1

基本 

当您希望非静态方法或非静态代码块只能由一个线程访问时,可以使用它

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

2

静态/非静态 

应始终使用它来确保非静态数据线程安全。 

应始终使用它来确保静态数据线程安全。


3

锁的数量

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

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

类级别锁的示例

public class ClassLevelLockExample {
   public void classLevelLockMethod() {
      synchronized (ClassLevelLockExample.class) {
         //在此处执行您的操作
      }
   }
}

对象级别锁的示例

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

相关文章