重入锁的好搭档Condition

164 阅读1分钟

作用

Condition对象的使用与wait()和notify()方法大致相同,只不过wait()和notify()是与synchronized关键字合作使用,而Condition是与重入锁相关联的。

简单使用

public class ReenterLockCondition implements Runnable{
    static ReentrantLock reentrantLock=new ReentrantLock();
    static Condition condition=  reentrantLock.newCondition();


    @Override
    public void run() {
        reentrantLock.lock();
        try{
            System.out.println("等待中");
            condition.await();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }finally {
            reentrantLock.unlock();
            System.out.println("唤醒结束");
        }
    }

    public static void main(String[] args) throws InterruptedException {
        ReenterLockCondition reenterLockCondition=new ReenterLockCondition();
        Thread thread=new Thread(reenterLockCondition);
        thread.start();
        Thread.sleep(1000);
//        先获得锁才能唤醒
        reentrantLock.lock();
        try{
            condition.signal();
        } finally {
            reentrantLock.unlock();
        }
    }
}

注意:

线程使用Condition.await()和Condition.signal()前,都要求线程先获得相关的锁。