全网整合营销服务商

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

免费咨询热线: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 


相关文章: 如何在局域网内绑定自建网站域名?  建站中国官网:模板定制+SEO优化+建站流程一站式指南  专业网站设计制作公司,如何制作一个企业网站,建设网站的基本步骤有哪些?  公司网站的制作公司,企业网站制作基本流程有哪些?  已有域名和空间,如何快速搭建网站?  简单实现Android验证码  如何在IIS7上新建站点并设置安全权限?  教学论文网站制作软件有哪些,写论文用什么软件 ?  网站制作新手教程,新手建设一个网站需要注意些什么?  制作公司内部网站有哪些,内网如何建网站?  网站制作公司,橙子建站是合法的吗?  网站设计制作公司地址,网站建设比较好的公司都有哪些?  建站之星安装步骤有哪些常见问题?  建站主机选哪种环境更利于SEO优化?  济南专业网站制作公司,济南信息工程学校怎么样?  如何在IIS服务器上快速部署高效网站?  如何在搬瓦工VPS快速搭建网站?  如何通过宝塔面板实现本地网站访问?  如何用PHP工具快速搭建高效网站?  股票网站制作软件,网上股票怎么开户?  开源网站制作软件,开源网站什么意思?  建站之星2.7模板快速切换与批量管理功能操作指南  建站主机选虚拟主机还是云服务器更好?  南京做网站制作公司,南京哈发网络有限公司,公司怎么样,做网页美工DIV+CSS待遇怎么样?  建站之星如何通过成品分离优化网站效率?  建站之星如何实现PC+手机+微信网站五合一建站?  网站制作报价单模板图片,小松挖机官方网站报价?  北京制作网站的公司,北京铁路集团官方网站?  ppt制作免费网站有哪些,ppt模板免费下载网站?  如何制作网站标识牌,动态网站如何制作(教程)?  小说建站VPS选用指南:性能对比、配置优化与建站方案解析  官网网站制作腾讯审核要多久,联想路由器newifi官网  如何快速生成橙子建站落地页链接?  平台云上自助建站如何快速打造专业网站?  企业宣传片制作网站有哪些,传媒公司怎么找企业宣传片项目?  如何在宝塔面板中创建新站点?  建站10G流量真的够用吗?如何应对访问高峰?  如何用西部建站助手快速创建专业网站?  北京专业网站制作设计师招聘,北京白云观官方网站?  浅谈Javascript中的Label语句  如何在腾讯云免费申请建站?  潍坊网站制作公司有哪些,潍坊哪家招聘网站好?  宝塔建站助手安装配置与建站模板使用全流程解析  定制建站流程步骤详解:一站式方案设计与开发指南  高端建站如何打造兼具美学与转化的品牌官网?  linux top下的 minerd 木马清除方法  金*站制作公司有哪些,金华教育集团官网?  SQL查询语句优化的实用方法总结  上海网站制作网页,上海本地的生活网站有哪些?最好包括生活的各个方面的?  如何用低价快速搭建高质量网站? 

您的项目需求

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