java中的可重入锁有哪些
时间: 2023-09-18 15:13:57 浏览: 188
Java源码解析之可重入锁ReentrantLock
在 Java 中,可重入锁是指在同一个线程中,可以重复获取锁而不会导致死锁。Java 中提供了两种可重入锁的实现:synchronized 和 ReentrantLock。
1. synchronized
synchronized 是 Java 中最基本的互斥同步手段,用于保证多个线程访问共享资源的互斥性。synchronized 是可重入锁,当一个线程持有锁时,可以再次获取该锁而不会导致死锁。
例如,下面的代码演示了 synchronized 的可重入特性:
```java
public class ReentrantDemo {
public synchronized void method1() {
System.out.println("method1");
method2();
}
public synchronized void method2() {
System.out.println("method2");
}
public static void main(String[] args) {
ReentrantDemo demo = new ReentrantDemo();
demo.method1();
}
}
```
输出结果为:
```
method1
method2
```
2. ReentrantLock
ReentrantLock 是 Java 提供的另一种可重入锁实现方式,相对于 synchronized 更加灵活。与 synchronized 不同,ReentrantLock 可以手动控制锁的获取和释放,并且提供了更多的高级特性,例如可中断锁、公平锁、多条件变量等。与 synchronized 类似,ReentrantLock 也是可重入锁。
例如,下面的代码演示了 ReentrantLock 的可重入特性:
```java
public class ReentrantLockDemo {
private final ReentrantLock lock = new ReentrantLock();
public void method1() {
lock.lock();
try {
System.out.println("method1");
method2();
} finally {
lock.unlock();
}
}
public void method2() {
lock.lock();
try {
System.out.println("method2");
} finally {
lock.unlock();
}
}
public static void main(String[] args) {
ReentrantLockDemo demo = new ReentrantLockDemo();
demo.method1();
}
}
```
输出结果为:
```
method1
method2
```
以上就是 Java 中可重入锁的两种实现方式。
阅读全文