并发编程 ReentrantLock
本文将介绍 JUC 中的可重入锁 ReentrantLock。
一、什么是 ReentrantLock?
可重入锁,此类型的锁允许被同一个线程重复加锁。
JUC 提供了可重入锁 ReentrantLock。
二、说明
假如线程已经对一把锁加锁,
如果该锁是可重入锁,线程可以继续加锁
如果该锁是非可重入锁,线程将会阻塞
因为此时锁已被占据(虽然占据者是线程自身),因此线程会进入阻塞状态
示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
class Test {
Lock rtl = new ReentrantLock();
int value;
public int get() {
// 获取锁
rtl.lock();
try {
return value;
} finally {
// 保证锁能释放
rtl.unlock();
}
}
public void addOne() {
// 获取锁
rtl.lock();
try {
value = 1 + get();
} finally {
// 保证锁能释放
rtl.unlock();
}
}
}
参考
- Java 并发编程实战