java中ReentrantLock使用样例以及描述
时间: 2024-01-12 17:41:39 浏览: 115
ReentrantLock是Java中的一种可重入互斥锁,它具有与同步代码块相同的基本行为和语义。下面是ReentrantLock使用样例:
```java
import java.util.concurrent.locks.ReentrantLock;
public class LockExample {
private final ReentrantLock lock = new ReentrantLock();
private int count = 0;
public void increment() {
lock.lock();
try {
count++;
} finally {
lock.unlock();
}
}
public int getCount() {
lock.lock();
try {
return count;
} finally {
lock.unlock();
}
}
public static void main(String[] args) {
LockExample example = new LockExample();
Thread thread1 = new Thread(() -> {
for (int i = 0; i < 100000; i++) {
example.increment();
}
});
Thread thread2 = new Thread(() -> {
for (int i = 0; i < 100000; i++) {
example.increment();
}
});
thread1.start();
thread2.start();
try {
thread1.join();
thread2.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Count is: " + example.getCount());
}
}
```
在上面的例子中,我们使用ReentrantLock来保护一个共享计数器。我们使用lock.lock()和lock.unlock()方法来获取和释放锁。在increment()和getCount()方法中,我们都使用了lock.lock()和lock.unlock()方法,以确保这些方法可以互斥地执行。
需要注意的是,当使用ReentrantLock时,必须在finally块中调用lock.unlock()方法,以确保锁在所有情况下都被释放,即使在代码中出现异常。否则,锁可能被一直持有,从而导致死锁或死循环等问题。
阅读全文