生产者和消费者问题是线程模型中的经典问题:生产者和消费者在同一时间段内共用同一个存储空间,如下图所示,生产者向空间里存放数据,而消费者取用数据,如果不加以协调可能会出现以下情况:

存储空间已满,而生产者占用着它,消费者等着生产者让出空间从而去除产品,生产者等着消费者消费产品,从而向空间中添加产品。互相等待,从而发生死锁。
以下实例演示了如何通过线程解决生产者/消费者问题:
/*
author by w3cschool.cc
ProducerConsumerTest.java
*/
public class ProducerConsumerTest {
public static void main(String[] args) {
CubbyHole c = new CubbyHole();
Producer p1 = new Producer(c, 1);
Consumer c1 = new Consumer(c, 1);
p1.start();
c1.start();
}
}
class CubbyHole {
private int contents;
private boolean available = false;
public synchronized int get() {
while (available == false) {
try {
wait();
}
catch (InterruptedException e) {
}
}
available = false;
notifyAll();
return contents;
}
public synchronized void put(int value) {
while (available == true) {
try {
wait();
}
catch (InterruptedException e) {
}
}
contents = value;
available = true;
notifyAll();
}
}
class Consumer extends Thread {
private CubbyHole cubbyhole;
private int number;
public Consumer(CubbyHole c, int number) {
cubbyhole = c;
this.number = number;
}
public void run() {
int value = 0;
for (int i = 0; i < 10; i++) {
value = cubbyhole.get();
System.out.println("消费者 #" + this.number+ " got: " + value);
}
}
}
class Producer extends Thread {
private CubbyHole cubbyhole;
private int number;
public Producer(CubbyHole c, int number) {
cubbyhole = c;
this.number = number;
}
public void run() {
for (int i = 0; i < 10; i++) {
cubbyhole.put(i);
System.out.println("生产者 #" + this.number + " put: " + i);
try {
sleep((int)(Math.random() * 100));
} catch (InterruptedException e) { }
}
}
}
以上代码运行输出结果为:
消费者 #1 got: 0 生产者 #1 put: 0 生产者 #1 put: 1 消费者 #1 got: 1 生产者 #1 put: 2 消费者 #1 got: 2 生产者 #1 put: 3 消费者 #1 got: 3 生产者 #1 put: 4 消费者 #1 got: 4 生产者 #1 put: 5 消费者 #1 got: 5 生产者 #1 put: 6 消费者 #1 got: 6 生产者 #1 put: 7 消费者 #1 got: 7 生产者 #1 put: 8 消费者 #1 got: 8 生产者 #1 put: 9 消费者 #1 got: 9
希望本篇文章对您有所帮助
# Java
# 生产者/消费者实例
# Java生产者消费者
# Java实现Kafka生产者消费者代码实例
# Java基于Lock的生产者消费者模型示例
# kafka生产者和消费者的javaAPI的示例代码
# 基于Java 生产者消费者模式(详细分析)
# Java实现生产者消费者问题与读者写者问题详解
# Java多线程之线程通信生产者消费者模式及等待唤醒机制代码详解
# JAVA多线程实现生产者消费者的实例详解
# Java多种方式实现生产者消费者模式
# 等着
# 死锁
# 问题是
# 所示
# 对您
# 已满
# 如下图
# 用着
# 而向
# 时间段内
# 在同一
# public
# static
# ProducerConsumerTest
# w3cschool
# cc
# String
# args
# CubbyHole
# void
相关文章:
如何在局域网内绑定自建网站域名?
建站中国官网:模板定制+SEO优化+建站流程一站式指南
专业网站设计制作公司,如何制作一个企业网站,建设网站的基本步骤有哪些?
公司网站的制作公司,企业网站制作基本流程有哪些?
已有域名和空间,如何快速搭建网站?
简单实现Android验证码
如何在IIS7上新建站点并设置安全权限?
教学论文网站制作软件有哪些,写论文用什么软件
?
网站制作新手教程,新手建设一个网站需要注意些什么?
制作公司内部网站有哪些,内网如何建网站?
网站制作公司,橙子建站是合法的吗?
网站设计制作公司地址,网站建设比较好的公司都有哪些?
建站之星安装步骤有哪些常见问题?
建站主机选哪种环境更利于SEO优化?
济南专业网站制作公司,济南信息工程学校怎么样?
如何在IIS服务器上快速部署高效网站?
如何在搬瓦工VPS快速搭建网站?
如何通过宝塔面板实现本地网站访问?
如何用PHP工具快速搭建高效网站?
股票网站制作软件,网上股票怎么开户?
开源网站制作软件,开源网站什么意思?
建站之星2.7模板快速切换与批量管理功能操作指南
建站主机选虚拟主机还是云服务器更好?
南京做网站制作公司,南京哈发网络有限公司,公司怎么样,做网页美工DIV+CSS待遇怎么样?
建站之星如何通过成品分离优化网站效率?
建站之星如何实现PC+手机+微信网站五合一建站?
网站制作报价单模板图片,小松挖机官方网站报价?
北京制作网站的公司,北京铁路集团官方网站?
ppt制作免费网站有哪些,ppt模板免费下载网站?
如何制作网站标识牌,动态网站如何制作(教程)?
小说建站VPS选用指南:性能对比、配置优化与建站方案解析
官网网站制作腾讯审核要多久,联想路由器newifi官网
如何快速生成橙子建站落地页链接?
平台云上自助建站如何快速打造专业网站?
企业宣传片制作网站有哪些,传媒公司怎么找企业宣传片项目?
如何在宝塔面板中创建新站点?
建站10G流量真的够用吗?如何应对访问高峰?
如何用西部建站助手快速创建专业网站?
北京专业网站制作设计师招聘,北京白云观官方网站?
浅谈Javascript中的Label语句
如何在腾讯云免费申请建站?
潍坊网站制作公司有哪些,潍坊哪家招聘网站好?
宝塔建站助手安装配置与建站模板使用全流程解析
定制建站流程步骤详解:一站式方案设计与开发指南
高端建站如何打造兼具美学与转化的品牌官网?
linux top下的 minerd 木马清除方法
金*站制作公司有哪些,金华教育集团官网?
SQL查询语句优化的实用方法总结
上海网站制作网页,上海本地的生活网站有哪些?最好包括生活的各个方面的?
如何用低价快速搭建高质量网站?
*请认真填写需求信息,我们会在24小时内与您取得联系。