java167-生产者消费者问题

简介: java167-生产者消费者问题
class Ck {
      private char[] r1 = new char[8];
      private int wp = 0;
      public synchronized void shengchan(char aa) {
          while (wp == r1.length) //满了
              try {
                  this.wait();
              } catch (Exception e) {
              }
              this.notify();//叫醒另一个线程,当前线程处于就绪状态
              r1[wp] = aa;
              ++wp;
              System.out.println( "生产者正在生产第" + wp + "个产品,该产品为" + aa );
      }
      public synchronized void xiaofei() {
          char aa;
          while (wp == 0)
              try {
                  this.wait();
              } catch (Exception e) {
              }
              this.notify();
              aa = r1[wp - 1];
              System.out.println( "生产者正在消费第" + wp + "个产品,该产品为" + aa );
              --wp;
      }//代码生产消费问题实现
  }
 定义生产//生产
 public class Sc implements Runnable {
     private Ck xc = null;
     public Sc(Ck xc) {
         this.xc = xc;
     }
     public void run() {
         char aa;
         for (int i = 0; i < 26; i++) {
             aa = (char) ('A' + i);
             xc.shengchan( aa );
         }
     }
 }
 定义消费//消费
 public class Xf implements Runnable {
     private Ck xc = null;
     public Xf(Ck xc) {
         this.xc = xc;
     }
     public void run() {
         char aa;
         for (int i = 0; i < 26; i++) {
             aa = (char) ('A' + i);
             xc.xiaofei();
         }
     }
 }
 测试类//代码生产消费问题实现
     public class test119{
     public static void main(String[] args){
         Ck ck=new Ck();
         Sc sc=new Sc( ck );
         Xf xf=new Xf(ck);
         Thread xc1=new Thread( sc );
         xc1.start();
         Thread xc2=new Thread( xf );
         xc2.start();
     }
     }

image.png

相关文章
|
11月前
|
Java
Java—多线程实现生产消费者
本文介绍了多线程实现生产消费者模式的三个版本。Version1包含四个类:`Producer`(生产者)、`Consumer`(消费者)、`Resource`(公共资源)和`TestMain`(测试类)。通过`synchronized`和`wait/notify`机制控制线程同步,但存在多个生产者或消费者时可能出现多次生产和消费的问题。 Version2将`if`改为`while`,解决了多次生产和消费的问题,但仍可能因`notify()`随机唤醒线程而导致死锁。因此,引入了`notifyAll()`来唤醒所有等待线程,但这会带来性能问题。
228 1
Java—多线程实现生产消费者
|
安全 Java
Java多线程通信新解:本文通过生产者-消费者模型案例,深入解析wait()、notify()、notifyAll()方法的实用技巧
【10月更文挑战第20天】Java多线程通信新解:本文通过生产者-消费者模型案例,深入解析wait()、notify()、notifyAll()方法的实用技巧,包括避免在循环外调用wait()、优先使用notifyAll()、确保线程安全及处理InterruptedException等,帮助读者更好地掌握这些方法的应用。
177 1
|
安全 Java
Java模拟生产者-消费者问题。生产者不断的往仓库中存放产品,消费者从仓库中消费产品。其中生产者和消费者都可以有若干个。在这里,生产者是一个线程,消费者是一个线程。仓库容量有限,只有库满时生产者不能存
该博客文章通过Java代码示例演示了生产者-消费者问题,其中生产者在仓库未满时生产产品,消费者在仓库有产品时消费产品,通过同步机制确保多线程环境下的线程安全和有效通信。
|
设计模式 安全 NoSQL
Java面试题:设计一个线程安全的单例模式,并解释其内存占用和垃圾回收机制;使用生产者消费者模式实现一个并发安全的队列;设计一个支持高并发的分布式锁
Java面试题:设计一个线程安全的单例模式,并解释其内存占用和垃圾回收机制;使用生产者消费者模式实现一个并发安全的队列;设计一个支持高并发的分布式锁
190 0
|
存储 设计模式 监控
Java面试题:如何在不牺牲性能的前提下,实现一个线程安全的单例模式?如何在生产者-消费者模式中平衡生产和消费的速度?Java内存模型规定了变量在内存中的存储和线程间的交互规则
Java面试题:如何在不牺牲性能的前提下,实现一个线程安全的单例模式?如何在生产者-消费者模式中平衡生产和消费的速度?Java内存模型规定了变量在内存中的存储和线程间的交互规则
145 0
|
存储 算法 安全
Java面试题:给定一个可能产生内存泄漏的场景,如何诊断并解决?实现一个生产者-消费者模型,使用适当的同步机制与并发工具类,Java并发工具包与框架:性能与调优
Java面试题:给定一个可能产生内存泄漏的场景,如何诊断并解决?实现一个生产者-消费者模型,使用适当的同步机制与并发工具类,Java并发工具包与框架:性能与调优
193 0
|
消息中间件 Java Kafka
使用Java编写Kafka生产者和消费者示例
使用Java编写Kafka生产者和消费者示例
777 0
|
消息中间件 Java RocketMQ
MQ产品使用合集之在同一个 Java 进程内建立三个消费对象并设置三个消费者组订阅同一主题和标签的情况下,是否会发生其中一个消费者组无法接收到消息的现象
消息队列(MQ)是一种用于异步通信和解耦的应用程序间消息传递的服务,广泛应用于分布式系统中。针对不同的MQ产品,如阿里云的RocketMQ、RabbitMQ等,它们在实现上述场景时可能会有不同的特性和优势,比如RocketMQ强调高吞吐量、低延迟和高可用性,适合大规模分布式系统;而RabbitMQ则以其灵活的路由规则和丰富的协议支持受到青睐。下面是一些常见的消息队列MQ产品的使用场景合集,这些场景涵盖了多种行业和业务需求。
321 1
|
消息中间件 存储 Java
Java与Go的生产者消费者模型比较
【4月更文挑战第20天】
130 1
|
消息中间件 Java
Java操作RabbitMQ单一生产-消费者模式
Java操作RabbitMQ单一生产-消费者模式
159 0