如何使用Lock和Condition来实现生产者消费者
发表于:2025-12-03 作者:千家信息网编辑
千家信息网最后更新 2025年12月03日,今天就跟大家聊聊有关如何使用Lock和Condition来实现生产者消费者,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。对比两种方式,Cond
千家信息网最后更新 2025年12月03日如何使用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安全错误
数据库的锁怎样保障安全
赶工的软件开发模式
七日杀为什么进服务器很慢
服务器开关电源改装方法求回答
包头有哪些软件开发公司
轮回服务器等级需要从新练吗
光遇有很多服务器么
小工厂远程服务器方案
一套客户端数据库
数据库时间用什么属性定义
在哪里管理数据库的权限
mqtt 服务器有哪些
网络安全负责人及工作责任人
达互联网科技有限公司
局域网网络安全注意事项
榆林软件开发定做
传世装备数据库
物理服务器在创建D盘
安卓vpn免费代理服务器
重庆忠县安卓软件开发机构
宝可梦服务器怎么卖东西
aitd无法连接服务器怎么办
汽车车载网络技术的应用包含哪些
软件开发新入职困难
居家网络技术有限公司
网络安全及意识形态工作》
我国网络安全缺口
pubg错误显示服务器正在维修
mt4服务器地址
移动视频聊天软件开发
软件开发用什工具