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(); // 启动线程
}
}
分享到:
相关推荐
`ProducerAndConsumer.zip`中的代码可能包含一个简单的Java实现,生产者类(Producer)和消费者类(Consumer)分别继承自Thread类,它们共享一个`BlockingQueue`实例。生产者类的run方法不断生成数据并调用`queue....
在主函数中,我们创建多个生产者与消费者实例,并启动它们。然后,可以通过监控缓冲区的变化来观察生产者与消费者的行为。 #### 六、实验结果与分析 在完成实验后,我们需要对结果进行详细的分析,包括但不限于: ...
这个C#实例通过图形化的方式展示了生产者与消费者的关系,帮助开发者直观地理解多线程环境下的同步机制。通过运行和分析代码,你可以学习到如何在实际项目中解决类似的问题,提高系统的并发性能和稳定性。
使用的生产者和消费者模型具有如下特点: (1)本实验的多个缓冲区不是环形循环的,也不要求按顺序访问。生产者可以把产品放到目前某一个空缓冲区中。 (2)消费者只消费指定生产者的产品。 (3)在测试用例文件中指定...
linux下的生产者与消费者实例,C实现,有注释,翻译的某个window下生产者与消费者的例子
本实例将深入探讨 Kafka 的核心概念——生产者和消费者,以及它们在实际应用中的工作原理。 Kafka 是一个高吞吐量、低延迟的分布式发布订阅消息系统,最初由 LinkedIn 开发,并于2011年开源。它设计的目标是能够...
在这个“java IBM MQ 7.5.0 生产者和消费者实例”中,我们将探讨如何使用Java编程语言与IBM MQ 7.5.0版本进行交互,创建生产者和消费者应用。 1. **IBM MQ安装与配置**: 在开始编程之前,首先需要在本地或服务器...
实验中提供的不同.exe文件可能代表了不同数量的生产者和消费者情况下的运行实例,比如“sx3(3个消费者,3个生产者).exe”可能是三个生产者同时与三个消费者协同工作的场景。通过运行这些程序,我们可以观察不同配置...
5. **主程序**:在`Kds`类的`main`方法中,实例化`HoldInt`对象,并基于该对象创建六个线程对象(三个生产者和三个消费者),启动这些线程。 #### 源代码分析 - `HoldInt`类中的`set()`和`get()`方法利用`while`...
在`Main`类中,我们创建了两个线程,一个作为生产者,另一个作为消费者,它们共享同一个`Buffer`实例。启动这两个线程后,生产者会不断向缓冲区添加产品,而消费者则不断从缓冲区取出产品进行消费,直到缓冲区为空或...
这个问题的核心在于如何有效地协调生产者线程(负责生产数据)和消费者线程(负责消费数据),使得生产与消费的过程既不会因为生产过快而导致资源浪费,也不会因为消费过快而使生产者空闲。 生产者-消费者问题通常...
总的来说,"操作系统生产者与消费者问题Java简单模拟实现"这个项目提供了一个直观的多线程编程实例,帮助我们理解和实践Java中的线程同步技术,这对于理解和解决实际并发问题具有重要意义。通过分析这个项目,我们...
### C++ PV操作(生产者/消费者)简单实例解析 #### 概述 在多线程编程中,生产者-消费者问题是一个经典的同步问题。它描述了一组生产数据的线程(生产者)和一组消费这些数据的线程(消费者)。为了确保线程间的...
生产者消费者问题是多线程编程中的经典模型,用于模拟两个或多个并发执行的实体(生产者和消费者)共享有限资源的情况。在这个问题中,生产者负责生成数据并放入缓冲区,而消费者则从缓冲区取出数据进行处理。当缓冲...
6. **运行模拟**:启动多个消费者实例,形成一个消费组。Kafka会自动平衡分区的消费,使得同一分区在消费组内只由一个消费者消费,保证消息的顺序。 在集群模式下,如果一个broker宕机,其上的分区将被自动重新分配...
《生产者与消费者问题》 生产者与消费者问题是操作系统中多进程或多线程同步的经典问题,它...在这个实例中,通过创建和管理多个信号量,成功地模拟了生产者与消费者之间的交互,展示了并发编程中同步控制的重要性。
参考教材中的生产者消费者算法,创建5个进程,其中两个进程为生产者进程,3个进程为消费者进程。一个生产者进程试图不断地在一个缓冲中写入大写字母,另一个生产者进程试图不断地在缓冲中写入小写字母。3个消费者...
通过以上信息,你可以开始构建Kafka的生产者和消费者实例。不过,要记住,实际部署时还需要考虑集群配置、容错机制、数据保留策略等高级特性。同时,Kafka还提供了更复杂的操作,如幂等性生产者、事务性消费者等,以...
本项目通过一个生产者消费者问题的实例,展示了如何在Java中实现线程间的同步与互斥。 生产者消费者问题是经典的并发问题之一,它涉及到两个类型的线程:生产者和消费者。生产者负责生成数据(产品),而消费者则...
在本示例"bcb 多线程示例 MutilThread(生产者与消费者)"中,我们将探讨 Borland C++ Builder (bcb) 平台上的线程应用,特别是生产者-消费者问题的解决方案。 生产者-消费者问题是多线程编程中的一个经典案例,它...