在多线程环境中,两个或多个线程可以同时访问共享资源,这可能导致系统行为不一致。Java使用锁的概念来限制对共享资源或对象的并发访问。锁可以应用于两个级别-
对象级锁-当您希望非静态方法或非静态代码块仅应由一个线程访问时,可以使用它。
类级别锁-当我们要防止 多个线程在运行时所有可用实例中的任何一个中进入同步块时,可以使用它。它应该始终用于使静态数据线程安全。
| 序号 | 键 | 对象级别锁定 | 类锁 | 
|---|---|---|---|
| 1 | 基本的 | 当您只希望一个线程访问非静态方法或非静态代码块时,可以使用它 | 当我们要防止多个线程在运行时在所有可用实例中的任何一个中进入同步块时,可以使用它 | 
| 2 | 静态/非静态 | 应该始终使用它来确保非静态数据线程的安全。 | 它应该始终用于使静态数据线程安全。 | 
| 3 | 锁数 | 类中的每个对象可能都有自己的锁 | 一个类的多个对象可能存在,但始终有一个类的类对象锁可用 | 
public class ClassLevelLockExample {
   public void classLevelLockMethod() {
      synchronized (ClassLevelLockExample.class) {
         //在这里做你的东西
      }
   }
}public class ObjectLevelLockExample {
   public void objectLevelLockMethod() {
      synchronized (this) {
         //在这里做你的东西
      }
   }
}