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();
    }
}