iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Java 生产者/消费者问题实例详解
  • 249
分享到

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

java生产者消费者ava 2023-05-31 15:05:33 249人浏览 独家记忆
摘要

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

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

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

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) { }   }  }}

--结束END--

本文标题: Java 生产者/消费者问题实例详解

本文链接: https://www.lsjlt.com/news/226885.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作