真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Java生產(chǎn)者/消費(fèi)者問題實(shí)例詳解

生產(chǎn)者和消費(fèi)者問題是線程模型中的經(jīng)典問題:生產(chǎn)者和消費(fèi)者在同一時(shí)間段內(nèi)共用同一個(gè)存儲(chǔ)空間,如下圖所示,生產(chǎn)者向空間里存放數(shù)據(jù),而消費(fèi)者取用數(shù)據(jù),如果不加以協(xié)調(diào)可能會(huì)出現(xiàn)以下情況:

讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來(lái)自于我們對(duì)這個(gè)行業(yè)的熱愛。我們立志把好的技術(shù)通過(guò)有效、簡(jiǎn)單的方式提供給客戶,將通過(guò)不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長(zhǎng)期合作伙伴,公司提供的服務(wù)項(xiàng)目有:域名與空間、網(wǎng)站空間、營(yíng)銷軟件、網(wǎng)站建設(shè)、長(zhǎng)樂網(wǎng)站維護(hù)、網(wǎng)站推廣。

存儲(chǔ)空間已滿,而生產(chǎn)者占用著它,消費(fèi)者等著生產(chǎn)者讓出空間從而去除產(chǎn)品,生產(chǎn)者等著消費(fèi)者消費(fèi)產(chǎn)品,從而向空間中添加產(chǎn)品?;ハ嗟却?,從而發(fā)生死鎖。

Java 生產(chǎn)者/消費(fèi)者問題實(shí)例詳解

以下實(shí)例演示了如何通過(guò)線程解決生產(chǎn)者/消費(fèi)者問題:

/*
 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("消費(fèi)者 #" + 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("生產(chǎn)者 #" + this.number + " put: " + i);
     try {
      sleep((int)(Math.random() * 100));
     } catch (InterruptedException e) { }
   }
  }
}

以上代碼運(yùn)行輸出結(jié)果為:

消費(fèi)者 #1 got: 0
生產(chǎn)者 #1 put: 0
生產(chǎn)者 #1 put: 1
消費(fèi)者 #1 got: 1
生產(chǎn)者 #1 put: 2
消費(fèi)者 #1 got: 2
生產(chǎn)者 #1 put: 3
消費(fèi)者 #1 got: 3
生產(chǎn)者 #1 put: 4
消費(fèi)者 #1 got: 4
生產(chǎn)者 #1 put: 5
消費(fèi)者 #1 got: 5
生產(chǎn)者 #1 put: 6
消費(fèi)者 #1 got: 6
生產(chǎn)者 #1 put: 7
消費(fèi)者 #1 got: 7
生產(chǎn)者 #1 put: 8
消費(fèi)者 #1 got: 8
生產(chǎn)者 #1 put: 9
消費(fèi)者 #1 got: 9

希望本篇文章對(duì)您有所幫助


本文名稱:Java生產(chǎn)者/消費(fèi)者問題實(shí)例詳解
文章起源:http://weahome.cn/article/psehii.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部