欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java如何通過線程解決生產(chǎn)者/消費者問題

 更新時間:2020年10月10日 10:55:28   作者:知優(yōu)碼  
這篇文章主要介紹了Java如何通過線程解決生產(chǎn)者/消費者問題,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下

生產(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)品?;ハ嗟却瑥亩l(fā)生死鎖。

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

/*
 author by javaidea.com
 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

以上就是Java如何通過線程解決生產(chǎn)者/消費者問題的詳細(xì)內(nèi)容,更多關(guān)于Java 解決生產(chǎn)者/消費者問題的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Springboot日期轉(zhuǎn)換器實現(xiàn)代碼及示例

    Springboot日期轉(zhuǎn)換器實現(xiàn)代碼及示例

    這篇文章主要介紹了Springboot日期轉(zhuǎn)換器實現(xiàn)代碼及示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-08-08
  • Java對象的復(fù)制三種方式(小結(jié))

    Java對象的復(fù)制三種方式(小結(jié))

    這篇文章主要介紹了Java對象的復(fù)制三種方式,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • java?JVM-clinit指令實現(xiàn)原理面試精講

    java?JVM-clinit指令實現(xiàn)原理面試精講

    這篇文章主要介紹了java?JVM-clinit指令實現(xiàn)原理面試精講,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10
  • spring security CSRF防護(hù)的示例代碼

    spring security CSRF防護(hù)的示例代碼

    這篇文章主要介紹了spring security CSRF防護(hù)的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-03-03
  • commons fileupload實現(xiàn)文件上傳的實例代碼

    commons fileupload實現(xiàn)文件上傳的實例代碼

    這篇文章主要介紹了commons fileupload實現(xiàn)文件上傳的實例代碼,包括文件上傳的原理分析等相關(guān)知識點,本文給大家介紹的非常詳細(xì),具有參考借鑒價值,感興趣的朋友一起看看吧
    2016-10-10
  • mybatis學(xué)習(xí)之路mysql批量新增數(shù)據(jù)的方法

    mybatis學(xué)習(xí)之路mysql批量新增數(shù)據(jù)的方法

    這篇文章主要介紹了mybatis學(xué)習(xí)之路mysql批量新增數(shù)據(jù)的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-02-02
  • 在JPA的@Query注解中使用limit條件(詳解)

    在JPA的@Query注解中使用limit條件(詳解)

    下面小編就為大家?guī)硪黄贘PA的@Query注解中使用limit條件(詳解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06
  • IDEA進(jìn)程已結(jié)束,退出代碼-1073741819 (0xC0000005)的bug

    IDEA進(jìn)程已結(jié)束,退出代碼-1073741819 (0xC0000005)的bug

    這篇文章主要介紹了IDEA進(jìn)程已結(jié)束,退出代碼-1073741819 (0xC0000005)的bug,本文通過實例代碼圖文的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-04-04
  • idea如何查看安裝插件的位置

    idea如何查看安裝插件的位置

    這篇文章主要介紹了idea如何查看安裝插件的位置問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • Java中比較器Comparator和Comparable的區(qū)別

    Java中比較器Comparator和Comparable的區(qū)別

    這篇文章主要介紹了Java中比較器Comparator和Comparable的區(qū)別,我們在使用?Collections.sort()對鏈表進(jìn)行排序時,常常需要根據(jù)不同情況自定義排序規(guī)則,今天我們來看看比較器之間的區(qū)別,需要的朋友可以參考下
    2023-08-08

最新評論