说一说你对Condition的理解

说一说你对Condition的理解Condition 是在 java 1 5 中才出现的 它用来替代传统的 Object 的 wait notify 实现线程间的协作 相比使用 Object 的 wait notify 使用 Condition 的 await signal 这种方式实现线程间协作更加

大家好,欢迎来到IT知识分享网。

【死记硬背】

Condition是在java 1.5中才出现的,它用来替代传统的Object的wait()、notify()实现线程间的协作,相比使用Object的wait()、notify(),使用Condition的await()、signal()这种方式实现线程间协作更加安全和高效。因此通常来说比较推荐使用Condition,阻塞队列实际上是使用了Condition来模拟线程间协作。

Condition是个接口,基本的方法就是await()和signal()方法;

Condition依赖于Lock接口,生成一个Condition的基本代码是lock.newCondition()调用Condition的await()和signal()方法,都必须在lock保护之内,就是说必须在lock.lock()和lock.unlock之间才可以使用Conditon中的await()对应Object的wait();

Condition中的signal()对应Object的notify();

Condition中的signalAll()对应Object的notifyAll()。

【答案解析】

Condition使用的一个案例。

import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; public class ConditionTest { final Lock lock = new ReentrantLock(); final Condition condition = lock.newCondition(); public static void main(String[] args) { // TODO Auto-generated method stub ConditionTest test = new ConditionTest(); Producer producer = test.new Producer(); producer.setName("product"); Consumer consumer = test.new Consumer(); consumer.setName("consumer"); consumer.start(); producer.start(); } class Consumer extends Thread { @Override public void run() { consume(); } private void consume() { try { lock.lock(); System.out.println("我在等一个新信号" + this.currentThread().getName()); condition.await(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { System.out.println("拿到一个信号" + this.currentThread().getName()); lock.unlock(); } } } class Producer extends Thread { @Override public void run() { produce(); } private void produce() { try { lock.lock(); System.out.println("我拿到锁" + this.currentThread().getName()); condition.signalAll(); System.out.println("我发出了一个信号:" + this.currentThread().getName()); } finally { lock.unlock(); } } } }

【温馨提示】

点赞+收藏文章,关注我并私信回复【面试题解析】,即可100%免费领取楼主的所有面试题资料!

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/179684.html

(0)
上一篇 2025-05-31 07:00
下一篇 2025-05-31 07:15

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信