ReentrantLock
java.util.concurrent
包中的内容,用于代替synchronized,也是可重入锁。
public class Counter {
private final Lock lock = new ReentrantLock();
private int count;
public void add(int n) {
lock.lock();
try {
count += n;
} finally {
lock.unlock();
}
}
}
ReentrantLock
新增了trylock(time, TimeUnit.SECONDS)
方法,如果在time
时间内没有获取到锁,就会返回false
。
if (lock.tryLock(1, TimeUnit.SECONDS)) {
try {
...
} finally {
lock.unlock();
}
}