最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java 生產(chǎn)者/消費者問題實例詳解

 更新時間:2017年04月18日 11:20:24   投稿:wbb  
這篇文章主要實例分析了java中生產(chǎn)者消費者問題的方法,需要的朋友可以可以參考下

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

存儲空間已滿,而生產(chǎn)者占用著它,消費者等著生產(chǎn)者讓出空間從而去除產(chǎn)品,生產(chǎn)者等著消費者消費產(chǎn)品,從而向空間中添加產(chǎn)品。互相等待,從而發(fā)生死鎖。


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

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

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

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

希望本篇文章對您有所幫助

相關(guān)文章

  • 超簡潔java實現(xiàn)雙色球若干注隨機號碼生成(實例代碼)

    超簡潔java實現(xiàn)雙色球若干注隨機號碼生成(實例代碼)

    這篇文章主要介紹了超簡潔java實現(xiàn)雙色球若干注隨機號碼生成(實例代碼),本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-04-04
  • SpringBoot 指標監(jiān)控actuator的專題

    SpringBoot 指標監(jiān)控actuator的專題

    未來每一個微服務(wù)在云上部署以后,我們都需要對其進行監(jiān)控、追蹤、審計、控制等。SpringBoot就抽取了Actuator場景,使得我們每個微服務(wù)快速引用即可獲得生產(chǎn)級別的應(yīng)用監(jiān)控、審計等功能,通讀本篇對大家的學習或工作具有一定的價值,需要的朋友可以參考下
    2021-11-11
  • @CacheEvict注解,清除緩存方式

    @CacheEvict注解,清除緩存方式

    這篇文章主要介紹了@CacheEvict注解,清除緩存方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • 在啟動后臺 jar包時,使用指定的 application.yml操作

    在啟動后臺 jar包時,使用指定的 application.yml操作

    這篇文章主要介紹了在啟動后臺 jar包時,使用指定的 application.yml操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • Spring初始化和銷毀的實現(xiàn)方法

    Spring初始化和銷毀的實現(xiàn)方法

    這篇文章主要介紹了Spring初始化和銷毀的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-10-10
  • RabbitMQ消息隊列的目錄結(jié)構(gòu)

    RabbitMQ消息隊列的目錄結(jié)構(gòu)

    這篇文章主要介紹了RabbitMQ消息隊列的目錄結(jié)構(gòu),RabbitMQ?屬于消息中間件,主要用于組件之間的解耦,消息的發(fā)送者無需知道消息使用者的存在,反之亦然,那么用了那么久RabbitMQ,其目錄結(jié)構(gòu)是怎樣的呢,讓我們一起來看一下吧
    2023-08-08
  • 淺談一下Java中的訪問修飾符以及作用

    淺談一下Java中的訪問修飾符以及作用

    這篇文章主要介紹了淺談一下Java中的訪問修飾符以及作用,修飾符修飾的是“被訪問”的權(quán)限,所有修飾符都可以修飾成員變量,方法,構(gòu)造方法,需要的朋友可以參考下
    2023-05-05
  • Java判斷101-200之間有多少個素數(shù)并輸出

    Java判斷101-200之間有多少個素數(shù)并輸出

    這篇文章主要介紹了Java判斷101-200之間有多少個素數(shù)并輸出,需要的朋友可以參考下
    2017-02-02
  • 精通Java泛型的使用與原理

    精通Java泛型的使用與原理

    針對利用繼承來實現(xiàn)通用程序設(shè)計所產(chǎn)生的問題,泛型提供了更好的解決方案,本文詳細的介紹了Java泛型的使用與原理,感興趣的可以了解一下
    2022-03-03
  • WIN7系統(tǒng)JavaEE(tomcat7 Eclipse)環(huán)境配置教程(二)

    WIN7系統(tǒng)JavaEE(tomcat7 Eclipse)環(huán)境配置教程(二)

    這篇文章主要介紹了WIN7系統(tǒng)JavaEE(java+tomcat7+Eclipse)環(huán)境配置教程,本文重點在于tomcat配置、Eclipse配置,感興趣的小伙伴們可以參考一下
    2016-06-06

最新評論

广安市| 越西县| 鞍山市| 阿坝县| 巴彦淖尔市| 简阳市| 民乐县| 福海县| 寿阳县| 金塔县| 邹平县| 武宣县| 封丘县| 九龙城区| 上虞市| 西华县| 黎平县| 舞钢市| 阜平县| 乡城县| 灌南县| 莱芜市| 丹东市| 广州市| 道真| 汉源县| 佳木斯市| 抚顺县| 故城县| 桑植县| 镇远县| 兰州市| 武乡县| 邓州市| 武义县| 平陆县| 清水河县| 海安县| 九江县| 吴江市| 通许县|