Condition接口

目录

Condition接口

一、 Condition介绍及使用

Condition接口是为了与Lock配合实现等待/通知模式, 可以将Condition等待通知和Lock的关系 与 Object的等待通知和Synchronized的关系类比;

  • Synchronized是通过锁对象即Object的wait() 和 notify() 实现等待通知;
  • Lock 则可以通过Condition的await() 和 signal() 实现等待通知;

Object的监视器方法与Condition接口对比如下图:

Condition对象定义了等待通知两种类型的方法, Condition对象有Lock对象(调用newCondition()方法)创建, Condition对象依赖于Lock对象;

import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

public class ConditionTest {

    private static Lock lock = new ReentrantLock();
    private static Condition condition = lock.newCondition();

    public static void main(String[] args) throws InterruptedException {
        new Thread(() -> {
            try {
                conditionWait();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }).start();
        //Thread.sleep(100);
        new Thread(() -> { conditionSignal(); }).start();
    }

    public static void conditionWait() throws InterruptedException {
        lock.lock();
        try{
            System.out.println("start wait");
            condition.await();
            System.out.println("wait end");
        }finally {
            lock.unlock();
        }
    }
    public static void conditionSignal() {
        lock.lock();
        try{
            System.out.println("signal");
            condition.signal();
        }finally {
            lock.unlock();
        }
    }
}
--- 输出:
start wait
signal
wait end

二、 Condition接口方法描述

猜你喜欢

转载自www.cnblogs.com/jxkun/p/9381822.html