程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> java處理單緩沖臨盆者花費者成績示例

java處理單緩沖臨盆者花費者成績示例

編輯:關於JAVA

java處理單緩沖臨盆者花費者成績示例。本站提示廣大學習愛好者:(java處理單緩沖臨盆者花費者成績示例)文章只能為提供參考,不一定能成為您想要的結果。以下是java處理單緩沖臨盆者花費者成績示例正文


經典的臨盆者花費者成績模仿。此法式模仿最簡略情況——單緩沖。為模仿現實情形,consume item和produce item時加了延時,可以經由過程修正延時模仿分歧的生成花費速度。

[code]

[/co/**
 * single buffer consumer-producer problem.
 * by xu([email protected]).
 * */
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]

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved