ReentrantLock的简单使用

ReentrantLock的简单使用

ReentrantLock这个是一个重入锁,是Lock的直接实现子类,他的使用其实很简单,就是在写业务代码的时候,加上这把锁之后,就会只有一个线程进来(reentrantLock.lock()和reentrantLock.unlock())之间

public class OrderService {
    // 使用static,这样每个线程拿到的是同一把锁,当然,spring mvc中service默认就是单例,别纠结这个
    private static ReentrantLock reentrantLock = new ReentrantLock(true);
 
    public void createOrder() {
        // 比如我们同一时间,只允许一个线程创建订单
        reentrantLock.lock();
        // 通常,lock 之后紧跟着 try 语句
        try {
            // 这块代码同一时间只能有一个线程进来(获取到锁的线程),
            // 其他的线程在lock()方法上阻塞,等待获取到锁,再进来
            // 执行代码...
            // 执行代码...
            // 执行代码...
        } finally {
            // 释放锁
            reentrantLock.unlock();
        }
    }
}

https://javadoop.com/2017/06/16/AbstractQueuedSynchronizer/

你可能感兴趣的:(ReentrantLock的简单使用)