public class Info {
private String title = "张三";
// private String title = "CHINA";
private String content = "李四";
// private String content = "US";
private boolean flag = false; // 默认是false
/*
* 1、flag = true,表示可以生产,但是不能取走
*
* 2、flag = false,表示可以取走,但是不能生产
*/
public synchronized void set(String title, String content) {
if (flag == false) {// 已经生产过了,需要等待
try {
super.wait(); // 等待
} catch (InterruptedException e) {
e.printStackTrace();
}
}
this.setTitle(title);
try {
Thread.sleep(300); // 休眠0.3秒
} catch (InterruptedException e) {
e.printStackTrace();
}
this.setContent(content);
this.flag = false;// 表示不能生产了
super.notify(); // 唤醒其他等待的线程
}
public synchronized void get() {
if (flag == true) {// 表示不能取
try {
super.wait(); // 等待
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println(this.title + " --> " + this.content);
this.flag = true;// 表示不能取走了
super.notify(); // 唤醒
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
}
二 创建建生产者
public class Producer implements Runnable {
private Info info = null;
public Producer(Info info) {
this.info = info;
}
public void run() {
for (int x = 0; x < 100; x++) { // 不断的生产
if (x % 2 == 0) {// 是奇数
this.info.set("李四", "US");
} else {
this.info.set("张三", "CHINA");
}
}
}
}
三 创建消费者
public class Consumer implements Runnable {
private Info info = null;
public Consumer(Info info) {
this.info = info;
}
public void run() {
for (int x = 0; x < 100; x++) {
this.info.get();
}
}
}
四 测试类
public class TestInfo{
public static void main(String[] args) {
Info info = new Info();
Producer pro = new Producer(info); // 实例化生产者对象
Consumer con = new Consumer(info); // 实例化消费者对象
new Thread(pro).start(); // 启动线程
new Thread(con).start(); // 启动线程
}
}
分享到:
相关推荐
生产者与消费者实例代码,线程学习必备 生产者与消费者实例代码,线程学习必备 生产者与消费者实例代码,线程学习必备
使用的生产者和消费者模型具有如下特点: (1)本实验的多个缓冲区不是环形循环的,也不要求按顺序访问。生产者可以把产品放到目前某一个空缓冲区中。 (2)消费者只消费指定生产者的产品。 (3)在测试用例文件中指定...
C#编写的有关操作系统中生产者与消费者问题的实例,画面美观,生动形象的描绘了生产者与消费者之间的关系,代码部分简介易懂。
linux下的生产者与消费者实例,C实现,有注释,翻译的某个window下生产者与消费者的例子
kafka生产者消费者实例
java IBM MQ 7.5.0 生产者和消费者实例
多线程实例,关于生产者与消费者的问题 多线程实例,关于生产者与消费者的问题
参考教材中的生产者消费者算法,创建5个进程,其中两个进程为生产者进程,3个进程为消费者进程。一个生产者进程试图不断地在一个缓冲中写入大写字母,另一个生产者进程试图不断地在缓冲中写入小写字母。3个消费者...
用JAVA模拟生产者与消费者的实例,java 生产者 消费者 操作系统
参考教材中的生产者消费者算法,创建5个进程,其中两个进程为生产者进程,3个进程为消费者进程。一个生产者进程试图不断地在一个缓冲中写入大写字母,另一个生产者进程试图不断地在缓冲中写入小写字母。3个消费者...
生产者-消费者问题 Windows C++代码演示
操作系统中经典的互斥信号量机制的应用--生产者、消费者
kafka实例 消费者生产者,实现代码,可使用maven 下载包pom.xml
这个程序用来实现生产者消费者,非常巧妙,里面用到math.h头文件的中包含的函数,需要对c语言非常了解。 特别强调一点,由rand()产生的随机数并不是完全随机的而是有一定规律可循的,里面会用到。
生产者消费者问题(信号量+mutex) 参考教材中的生产者消费者算法,创建5个进程,其中两个进程为生产者进程,3个进程为消费者进程。一个生产者进程试图不断地在一个缓冲中写入大写字母,另一个生产者进程试图不断地...
读《深入理解计算机系统》后,参照书中程序,用C代码实现生产者消费者模型,本代码可移植性强,各接口以封装好,并有注释
本文实例讲述了Python实现的生产者、消费者问题。分享给大家供大家参考,具体如下: 生产者、消费者问题,经典的线程同步问题:假设有一个缓冲池(列表),生产者往里面放东西,消费者从里面取,规则是:列表为空的...
此实例在windows 10系统上可以成功运行,可以修改一下,在linux上也可以运行,思路都是一样的。 说明:这个是个图书馆案例,默认100个座位,生产者与消费者各2个线程 (修改:加锁)
最全的生产者消费者各种实现代码示例,参考学习
该程序是我写的博客“一起talk C栗子吧(第一百零六回:C语言实例--生产者与消费者问题二)”的配套程序,共享给大家使用