Java 中的对象级锁与类级锁?
javaobject oriented programmingprogramming更新于 2025/6/22 9:16:17
在多线程应用程序中,对象级锁和类级锁均用于实现同步机制。
对象级锁
Java 中的每个对象都有一个唯一锁。如果线程想要在给定对象上执行同步方法,首先它必须获取该对象的锁。一旦线程获得锁,就可以在该对象上执行任何同步方法。一旦方法执行完成,线程就会自动释放锁。内部获取和释放锁由JVM负责。 对象级锁定是一种机制,当我们想要同步非静态方法或非静态代码块时,只有一个线程能够在给定的类实例上执行代码块。始终可以这样做以使实例级数据线程安全。
示例
public class ObjectLevelLockTest implements Runnable {
@Override
public void run() {
objectLock();
}
public void objectLock() {
System.out.println(Thread.currentThread().getName());
synchronized(this) {
System.out.println("Synchronized block " + Thread.currentThread().getName());
System.out.println("Synchronized block " + Thread.currentThread().getName() + " end");
}
}
public static void main(String[] args) {
ObjectLevelLockTest test1 = new ObjectLevelLockTest();
Thread t1 = new Thread(test1);
Thread t2 = new Thread(test1);
ObjectLevelLockTest test2 = new ObjectLevelLockTest();
Thread t3 = new Thread(test2);
t1.setName("t1");
t2.setName("t2");
t3.setName("t3");
t1.start();
t2.start();
t3.start();
}
}
输出
t1 t2 t3 Synchronized block t1 Synchronized block t3 Synchronized block t1 end Synchronized block t3 end Synchronized block t2 Synchronized block t2 end
类级锁
Java 中的每个类都有一个唯一锁,它只不过是一个类级锁。如果一个线程想要执行一个静态同步方法,那么线程需要一个类级锁。一旦线程获得了类级锁,它就可以执行该类的任何静态同步方法。一旦方法执行完成,线程就会自动释放锁。类级锁可防止多个线程在运行时进入任何可用实例中的同步块。
示例
public class ClassLevelLockTest implements Runnable {
@Override
public void run() {
classLock();
}
public void classLock() {
System.out.println(Thread.currentThread().getName());
synchronized(ClassLevelLockTest.class) {
System.out.println("Synchronized block " + Thread.currentThread().getName());
System.out.println("Synchronized block " + Thread.currentThread().getName() + " end");
}
}
public static void main(String[] args) {
ClassLevelLockTest test1 = new ClassLevelLockTest();
Thread t1 = new Thread(test1);
Thread t2 = new Thread(test1);
ClassLevelLockTest test2 = new ClassLevelLockTest();
Thread t3 = new Thread(test2);
t1.setName("t1");
t2.setName("t2");
t3.setName("t3");
t1.start();
t2.start();
t3.start();
}
}
输出
t3 t2 t1 Synchronized block t3 Synchronized block t3 end Synchronized block t2 Synchronized block t2 end Synchronized block t1 Synchronized block t1 end
相关文章
有用资源
java 参考教程 - 该教程包含有关 java 的更多信息:https://www.cainiaomax.com/java/

