Condition接口
Posted jxkun
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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接口方法描述
以上是关于Condition接口的主要内容,如果未能解决你的问题,请参考以下文章