千家信息网

如何使用Lock和Condition来实现生产者消费者

发表于:2026-11-04 作者:千家信息网编辑
千家信息网最后更新 2026年11月04日,今天就跟大家聊聊有关如何使用Lock和Condition来实现生产者消费者,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。对比两种方式,Cond
千家信息网最后更新 2026年11月04日如何使用Lock和Condition来实现生产者消费者

今天就跟大家聊聊有关如何使用Lock和Condition来实现生产者消费者,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

对比两种方式,Condition的方式可以更加精确的指定哪些线程被唤醒。

public class MyContainer2 {        final private LinkedList lists = new LinkedList<>();        final private int MAX = 10; //最多10个元素        private int count = 0;                private Lock lock = new ReentrantLock();        //生产者的条件        private Condition producer = lock.newCondition();        //消费者的条件        private Condition consumer = lock.newCondition();                public void put(T t) {                try {                        lock.lock();                        while(lists.size() == MAX) { //想想为什么用while而不是用if?                                producer.await();                        }                                                lists.add(t);                        ++count;                        consumer.signalAll(); //通知消费者线程进行消费                } catch (InterruptedException e) {                        e.printStackTrace();                } finally {                        lock.unlock();                }        }                public T get() {                T t = null;                try {                        lock.lock();                        while(lists.size() == 0) {                                consumer.await();                        }                        t = lists.removeFirst();                        count --;                        producer.signalAll(); //通知生产者进行生产                } catch (InterruptedException e) {                        e.printStackTrace();                } finally {                        lock.unlock();                }                return t;        }                public static void main(String[] args) {                MyContainer2 c = new MyContainer2<>();                //启动消费者线程                for(int i=0; i<10; i++) {                        new Thread(()->{                                for(int j=0; j<5; j++) System.out.println(c.get());                        }, "c" + i).start();                }                                try {                        TimeUnit.SECONDS.sleep(2);                } catch (InterruptedException e) {                        e.printStackTrace();                }                                //启动生产者线程                for(int i=0; i<2; i++) {                        new Thread(()->{                                for(int j=0; j<25; j++) c.put(Thread.currentThread().getName() + " " + j);                        }, "p" + i).start();                }        }}

看完上述内容,你们对如何使用Lock和Condition来实现生产者消费者有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。

消费 生产 消费者 生产者 线程 内容 方式 条件 j++ 精确 元素 更多 知识 篇文章 行业 资讯 资讯频道 频道 进一 支持 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 上海卓越科技互联网 华服互联网科技怎么样 山东特亿宝互联网科技有限公司 互联网科技行业发展 智能科技公司是互联网公司吗 九亚互联网科技 智慧科技互联网 时间互联网络科技 火传媒上海互联网科技 长亮科技互联网金融 互联网养老 桔豆科技 丰台科技园 互联网公司 福州新华互联网科技学校 知乎 岳阳华臻互联网科技有限公司 江阴互联网智能科技产品进口 抖集互联网科技技术咨询 广西泛欧互联网科技有限公司 第三届互联网大会安防黑科技 保山浩联互联网科技有限公司 安徽九吞吴互联网科技有限公司 中国互联网金融科技基金 四个字互联网科技公司取名 互联网金融科技展 卓翼科技产业互联网合作 为客找房互联网科技公司怎么样 互联网相关科技技术 上海互联网科技公司ppt 西安有哪些互联网高科技企业 青岛易易互联网科技 山东蛋芒互联网科技有限公司
0