如何使用Lock和Condition来实现生产者消费者
发表于:2025-02-01 作者:千家信息网编辑
千家信息网最后更新 2025年02月01日,今天就跟大家聊聊有关如何使用Lock和Condition来实现生产者消费者,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。对比两种方式,Cond
千家信息网最后更新 2025年02月01日如何使用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安全错误
数据库的锁怎样保障安全
php 输入框查询数据库
网络安全知识展板
计算机网络技术课程教学视频
局域网络技术实训报告
山东铝业计算机网络技术代号
台湾服务器怎么样
修改服务器管理员口令
北京移动宽带服务器云服务器
6.23网络安全防溺水教育视频
临沂微信公众号软件开发系统
北京艾利艾互联网科技怎么样
深圳云盟互动网络技术
中国期刊引文数据库
学习网络安全网站
随时网络技术的发展翻译
网络安全法特征有哪些
数据库转出后成了倒序
技佳网络技术有限公司
眼镜行业软件开发在哪里找
数据库注册怎么弄
贵州网络安全工程哪个好
基因组功能注释数据库
软件开发经理竞聘PPT
数据库原理及应用教程第三版
盐城物联网大数据平台软件开发
桐梓租房软件开发
农村电影网络安全宣传
绿色能源服务器
ebrary电子书数据库
网络安全法考试报名条件