全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Java 生产者/消费者问题实例详解

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

存储空间已满,而生产者占用着它,消费者等着生产者让出空间从而去除产品,生产者等着消费者消费产品,从而向空间中添加产品。互相等待,从而发生死锁。


以下实例演示了如何通过线程解决生产者/消费者问题:

/*
 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 


相关文章: 网站制作专业公司有哪些,如何制作一个企业网站,建设网站的基本步骤有哪些?  ,怎么用自己头像做动态表情包?  如何在建站之星绑定自定义域名?  定制建站方案优化指南:企业官网开发与建站费用解析  北京的网站制作公司有哪些,哪个视频网站最好?  javascript中的try catch异常捕获机制用法分析  如何通过虚拟主机快速完成网站搭建?  网站制作和推广的区别,想自己建立一个网站做推广,有什么快捷方法马上做好一个网站?  制作网站的模板软件,网站怎么建设?  C#怎么使用委托和事件 C# delegate与event编程方法  佛山网站制作系统,佛山企业变更地址网上办理步骤?  香港服务器租用每月最低只需15元?  建站之星如何通过成品分离优化网站效率?  c++23 std::expected怎么用 c++优雅处理函数错误返回【详解】  网站制作哪家好,cc、.co、.cm哪个域名更适合做网站?  如何高效搭建专业期货交易平台网站?  如何快速使用云服务器搭建个人网站?  桂林网站制作公司有哪些,桂林马拉松怎么报名?  如何通过山东自助建站平台快速注册域名?  安云自助建站系统如何快速提升SEO排名?  如何在IIS7上新建站点并设置安全权限?  网站设计制作公司地址,网站建设比较好的公司都有哪些?  如何访问已购建站主机并解决登录问题?  如何处理“XML格式不正确”错误 常见XML well-formed问题解决方法  网站制作公司,橙子建站是合法的吗?  建站之星如何实现五合一智能建站与营销推广?  杭州银行网站设计制作流程,杭州银行怎么开通认证方式?  ,制作一个手机app网站要多少钱?  如何通过二级域名建站提升品牌影响力?  如何在腾讯云免费申请建站?  c# 在高并发下使用反射发射(Reflection.Emit)的性能  建站主机SSH密钥生成步骤及常见问题解答?  ,购物网站怎么盈利呢?  矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?  公众号网站制作网页,微信公众号怎么制作?  黑客如何通过漏洞一步步攻陷网站服务器?  如何在阿里云虚拟服务器快速搭建网站?  制作国外网站的软件,国外有哪些比较优质的网站推荐?  企业网站制作费用多少,企业网站空间一般需要多大,费用是多少?  如何在建站之星网店版论坛获取技术支持?  简易网站制作视频教程,使用记事本编写一个简单的网页html文件?  活动邀请函制作网站有哪些,活动邀请函文案?  如何快速上传建站程序避免常见错误?  建站之星备案是否影响网站上线时间?  建站之星如何一键生成手机站?  宿州网站制作公司兴策,安徽省低保查询网站?  广州顶尖建站服务:企业官网建设与SEO优化一体化方案  建站主机空间推荐 高性价比配置与快速部署方案解析  如何快速搭建安全的FTP站点?  制作充值网站的软件,做人力招聘为什么要自己交端口钱? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。