码迷,mamicode.com
首页 > 其他好文 > 详细

使用Condition

时间:2019-12-20 15:31:11      阅读:99      评论:0      收藏:0      [点我收藏+]

标签:指定   引用   使用   需要   ant   实现   tco   释放   private   

/**

* ReentrantLock使用Condition对象来实现wait和notify的功能
* 使用Condition时,引用的Condition对象必须从Lock实例的newCondition()返回,这样才能获得一个绑定了Lock实例的Condition实例
* Condition提供的await()、signal()、signalAll()原理和synchronized锁对象的wait()、notify()、notifyAll()是一致的,并且其行为也是一样的
* await()会释放当前锁,进入等待状态
* signal()会唤醒某个等待线程;
* signalAll()会唤醒所有等待线程;
* 唤醒线程从await()返回后需要重新获得锁。
*/
class TestCondition{
private final Lock lock = new ReentrantLock();
private final Condition condition = lock.newCondition();
private Queue<String> queue = new LinkedList<>();

public void addTask(String task){
lock.lock();
try {
queue.add(task);
condition.signalAll();
} finally {
lock.unlock();
}
}

public String getTask() {
lock.lock();
try {
while (queue.isEmpty()) {
try {
condition.await();
/*if(condition.await(1, TimeUnit.SECONDS)){
//被其他线程唤醒
}else{
//指定时间内没有被其他线程唤醒
}*/
} catch (InterruptedException e) {
e.printStackTrace();
}
}
return queue.remove();
} finally {
lock.unlock();
}
}
}

使用Condition

标签:指定   引用   使用   需要   ant   实现   tco   释放   private   

原文地址:https://www.cnblogs.com/wueryuan/p/12073090.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!