源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

java解决单缓冲生产者消费者问题示例

  • 时间:2021-07-17 22:49 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:java解决单缓冲生产者消费者问题示例
经典的生产者消费者问题模拟。此程序模拟最简单情形——单缓冲。为模拟实际情况,consume item和produce item时加了延时,可以通过修改延时模拟不同的生成消费速率。 [code] [/co/**  * single buffer consumer-producer problem.  * by xu(xusiwei1236@163.com).  * */ public class ConsumerProducer {  static Object buffer = null;  static Object mutex = new Object();  static Object condConsumer = new Object();  static Object condProducer = new Object();  public static void main(String[] args) {   Thread producer = new Thread() {    public void run() { //    for(int i=0; i<10; i++) {     for(int i=0; ; i++) {      // produce item.      try {       Thread.sleep(1000);      } catch (InterruptedException e) {       e.printStackTrace();      }      String item = new String("item-" + i);      System.out.println("[producer] produced " + item);      // wait for buffer empty.      synchronized (condProducer) {       while(buffer != null) {        try {         condProducer.wait();        } catch (InterruptedException e) {         e.printStackTrace();        }       }      }      // put item to buffer.           synchronized (mutex) {       buffer = item;       System.out.println("[producer] put " + item + " to buffer.");      }      // notify consumers.      synchronized (condConsumer) {       condConsumer.notify();      }     }    }   };   Thread consumer = new Thread() {    public void run() { //    for(int i=0; i<10; i++) {     for( ; ; ) {      // wait for item come.      synchronized (condConsumer) {       while( buffer == null ) {        try {         condConsumer.wait();        } catch (InterruptedException e) {         e.printStackTrace();        }       }      }      // get item from buffer.      String item = null;      synchronized (mutex) {       item = (String)buffer;       buffer = null;       System.out.println("  [consumer] get " + item + " from buffer.");      }      // consume item.      try {       Thread.sleep(500);      } catch (InterruptedException e) {       e.printStackTrace();      }      System.out.println("  [consumer] comsumed " + item);      // notify producers.      synchronized (condProducer) {       condProducer.notify();      }     }    }   };   consumer.start();   producer.start();  } }de]
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部