Java 中的锁主要分为偏向锁、轻量级锁和重量级锁,它们之间的升级关系是为了在多线程竞争的情况下提高性能。下面简要介绍各种锁的升级原理:
偏向锁:
轻量级锁:
重量级锁:
下面是一个简单的示例,演示了轻量级锁的升级:
public class SynchronizedExample {
public static void main(String[] args) {
Object lock = new Object();
// 线程1:获取锁并持有
new Thread(() -> {
synchronized (lock) {
System.out.println("Thread 1 acquired the lock.");
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
// 线程2:尝试获取锁
new Thread(() -> {
synchronized (lock) {
System.out.println("Thread 2 acquired the lock.");
}
}).start();
}
}
在这个示例中,线程1先获取了锁并持有,然后线程2尝试获取锁。由于线程1持有锁的时间较长,线程2在尝试获取锁时会发生轻量级锁的升级,最终可能升级为重量级锁。