`

生产者与消费者实例

阅读更多

 

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下的生产者与消费者

    linux下的生产者与消费者实例,C实现,有注释,翻译的某个window下生产者与消费者的例子

    kafka生产者消费者实例

    本实例将深入探讨 Kafka 的核心概念——生产者和消费者,以及它们在实际应用中的工作原理。 Kafka 是一个高吞吐量、低延迟的分布式发布订阅消息系统,最初由 LinkedIn 开发,并于2011年开源。它设计的目标是能够...

    java IBM MQ 7.5.0 生产者和消费者实例

    在这个“java IBM MQ 7.5.0 生产者和消费者实例”中,我们将探讨如何使用Java编程语言与IBM MQ 7.5.0版本进行交互,创建生产者和消费者应用。 1. **IBM MQ安装与配置**: 在开始编程之前,首先需要在本地或服务器...

    进程同步实验——生产者与消费者问题算法实现

    实验中提供的不同.exe文件可能代表了不同数量的生产者和消费者情况下的运行实例,比如“sx3(3个消费者,3个生产者).exe”可能是三个生产者同时与三个消费者协同工作的场景。通过运行这些程序,我们可以观察不同配置...

    java生产者与消费者实验报告

    5. **主程序**:在`Kds`类的`main`方法中,实例化`HoldInt`对象,并基于该对象创建六个线程对象(三个生产者和三个消费者),启动这些线程。 #### 源代码分析 - `HoldInt`类中的`set()`和`get()`方法利用`while`...

    生产者与消费者 java实现

    在`Main`类中,我们创建了两个线程,一个作为生产者,另一个作为消费者,它们共享同一个`Buffer`实例。启动这两个线程后,生产者会不断向缓冲区添加产品,而消费者则不断从缓冲区取出产品进行消费,直到缓冲区为空或...

    多线程实例,关于生产者与消费者的问题

    这个问题的核心在于如何有效地协调生产者线程(负责生产数据)和消费者线程(负责消费数据),使得生产与消费的过程既不会因为生产过快而导致资源浪费,也不会因为消费过快而使生产者空闲。 生产者-消费者问题通常...

    操作系统生产者与消费者问题Java简单模拟实现

    总的来说,"操作系统生产者与消费者问题Java简单模拟实现"这个项目提供了一个直观的多线程编程实例,帮助我们理解和实践Java中的线程同步技术,这对于理解和解决实际并发问题具有重要意义。通过分析这个项目,我们...

    C++ PV操作(生产者/消费者)简单实例

    ### C++ PV操作(生产者/消费者)简单实例解析 #### 概述 在多线程编程中,生产者-消费者问题是一个经典的同步问题。它描述了一组生产数据的线程(生产者)和一组消费这些数据的线程(消费者)。为了确保线程间的...

    利用数组解决生产者消费者问题

    生产者消费者问题是多线程编程中的经典模型,用于模拟两个或多个并发执行的实体(生产者和消费者)共享有限资源的情况。在这个问题中,生产者负责生成数据并放入缓冲区,而消费者则从缓冲区取出数据进行处理。当缓冲...

    kafka模拟生产者消费者(集群模式)实例

    6. **运行模拟**:启动多个消费者实例,形成一个消费组。Kafka会自动平衡分区的消费,使得同一分区在消费组内只由一个消费者消费,保证消息的顺序。 在集群模式下,如果一个broker宕机,其上的分区将被自动重新分配...

    生产者与消费者问题

    《生产者与消费者问题》 生产者与消费者问题是操作系统中多进程或多线程同步的经典问题,它...在这个实例中,通过创建和管理多个信号量,成功地模拟了生产者与消费者之间的交互,展示了并发编程中同步控制的重要性。

    生产者消费者问题(信号量)(linux)实现代码

    参考教材中的生产者消费者算法,创建5个进程,其中两个进程为生产者进程,3个进程为消费者进程。一个生产者进程试图不断地在一个缓冲中写入大写字母,另一个生产者进程试图不断地在缓冲中写入小写字母。3个消费者...

    kafka实例 消费者生产者

    通过以上信息,你可以开始构建Kafka的生产者和消费者实例。不过,要记住,实际部署时还需要考虑集群配置、容错机制、数据保留策略等高级特性。同时,Kafka还提供了更复杂的操作,如幂等性生产者、事务性消费者等,以...

    JAVA实现线程间同步与互斥生产者消费者问题

    本项目通过一个生产者消费者问题的实例,展示了如何在Java中实现线程间的同步与互斥。 生产者消费者问题是经典的并发问题之一,它涉及到两个类型的线程:生产者和消费者。生产者负责生成数据(产品),而消费者则...

    bcb 多线程示例 MutilThread(生产者与消费者)

    在本示例"bcb 多线程示例 MutilThread(生产者与消费者)"中,我们将探讨 Borland C++ Builder (bcb) 平台上的线程应用,特别是生产者-消费者问题的解决方案。 生产者-消费者问题是多线程编程中的一个经典案例,它...

Global site tag (gtag.js) - Google Analytics