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

Java生產(chǎn)者和消費者例子_動力節(jié)點Java學(xué)院整理

 更新時間:2017年05月24日 10:30:16   投稿:mrr  
生產(chǎn)者-消費者(producer-consumer)問題,也稱作有界緩沖區(qū)(bounded-buffer)問題,兩個進程共享一個公共的固定大小的緩沖區(qū)。下文通過實例給大家介紹java生產(chǎn)者和消費者,感興趣的朋友一起學(xué)習(xí)吧

生產(chǎn)者-消費者(producer-consumer)問題,也稱作有界緩沖區(qū)(bounded-buffer)問題,兩個進程共享一個公共的固定大小的緩沖區(qū)。其中一個是生產(chǎn)者,用于將消息放入緩沖區(qū);另外一個是消費者,用于從緩沖區(qū)中取出消息。問題出現(xiàn)在當(dāng)緩沖區(qū)已經(jīng)滿了,而此時生產(chǎn)者還想向其中放入一個新的數(shù)據(jù)項的情形,其解決方法是讓生產(chǎn)者此時進行休眠,等待消費者從緩沖區(qū)中取走了一個或者多個數(shù)據(jù)后再去喚醒它。同樣地,當(dāng)緩沖區(qū)已經(jīng)空了,而消費者還想去取消息,此時也可以讓消費者進行休眠,等待生產(chǎn)者放入一個或者多個數(shù)據(jù)時再喚醒它。

一,首先定義公共資源類,其中的變量number是保存的公共數(shù)據(jù)。

并且定義兩個方法,增加number的值和減少number的值。由于多線程的原因,必須加上synchronized關(guān)鍵字,注意while判斷的條件。

Java代碼  

二,分別定義生產(chǎn)

 /** 
 * 公共資源類 
 */ 
 public class PublicResource { 
   private int number = 0; 
  
   /** 
   * 增加公共資源 
   */ 
   public synchronized void increace() { 
     while (number != 0) { 
       try { 
         wait(); 
       } catch (InterruptedException e) { 
         e.printStackTrace(); 
       } 
     } 
     number++; 
     System.out.println(number); 
     notify(); 
   } 
  
   /** 
   * 減少公共資源 
   */ 
   public synchronized void decreace() { 
     while (number == 0) { 
       try { 
         wait(); 
       } catch (InterruptedException e) { 
         e.printStackTrace(); 
       } 
     } 
     number--; 
     System.out.println(number); 
     notify(); 
   } 
 } 

者線程和消費者線程,并模擬多次生產(chǎn)和消費,即增加和減少公共資源的number值

Java代碼  

/** 
 * 生產(chǎn)者線程,負責(zé)生產(chǎn)公共資源 
 */ 
 public class ProducerThread implements Runnable { 
   private PublicResource resource; 
  
   public ProducerThread(PublicResource resource) { 
     this.resource = resource; 
   } 
  
   @Override 
   public void run() { 
     for (int i = 0; i < 10; i++) { 
       try { 
         Thread.sleep((long) (Math.random() * 1000)); 
       } catch (InterruptedException e) { 
         e.printStackTrace(); 
       } 
       resource.increace(); 
     } 
   } 
 } 
 /** 
 * 消費者線程,負責(zé)消費公共資源 
 */ 
 public class ConsumerThread implements Runnable { 
   private PublicResource resource; 
  
   public ConsumerThread(PublicResource resource) { 
     this.resource = resource; 
   } 
  
   @Override 
   public void run() { 
     for (int i = 0; i < 10; i++) { 
       try { 
         Thread.sleep((long) (Math.random() * 1000)); 
       } catch (InterruptedException e) { 
         e.printStackTrace(); 
       } 
       resource.decreace(); 
     } 
   } 
 } 

三,模擬多個生產(chǎn)者和消費者操作公共資源的情形,結(jié)果須保證是在允許的范圍內(nèi)。

Java代碼  

public class ProducerConsumerTest { 
   public static void main(String[] args) { 
     PublicResource resource = new PublicResource(); 
     new Thread(new ProducerThread(resource)).start(); 
     new Thread(new ConsumerThread(resource)).start(); 
     new Thread(new ProducerThread(resource)).start(); 
     new Thread(new ConsumerThread(resource)).start(); 
     new Thread(new ProducerThread(resource)).start(); 
     new Thread(new ConsumerThread(resource)).start(); 
   } 
 } 

以上所述是小編給大家介紹的Java生產(chǎn)者和消費者例子,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

  • java結(jié)合keytool如何實現(xiàn)非對稱簽名和驗證詳解

    java結(jié)合keytool如何實現(xiàn)非對稱簽名和驗證詳解

    這篇文章主要給大家介紹了關(guān)于java結(jié)合keytool如何實現(xiàn)非對稱簽名和驗證的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-08-08
  • Java畢業(yè)設(shè)計實戰(zhàn)之學(xué)生管理系統(tǒng)的實現(xiàn)

    Java畢業(yè)設(shè)計實戰(zhàn)之學(xué)生管理系統(tǒng)的實現(xiàn)

    只學(xué)書上的理論是遠遠不夠的,只有在實戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用java+Springboot+Maven+mybatis+Vue+Mysql實現(xiàn)學(xué)生管理系統(tǒng),大家可以在過程中查缺補漏,提升水平
    2022-03-03
  • IDEA切換JDK版本詳細教程(超管用)

    IDEA切換JDK版本詳細教程(超管用)

    在我們項目開發(fā)的過程中可能會遇到JDK版本過高或者過低導(dǎo)致一些程序無法啟動,不兼容的問題,所以我們需要切換JDK的版本號,這篇文章主要給大家介紹了關(guān)于IDEA切換JDK版本的相關(guān)資料,需要的朋友可以參考下
    2023-10-10
  • SpringBoot實現(xiàn)Excel文件批量上傳導(dǎo)入數(shù)據(jù)庫

    SpringBoot實現(xiàn)Excel文件批量上傳導(dǎo)入數(shù)據(jù)庫

    這篇文章主要為大家詳細介紹了SpringBoot實現(xiàn)Excel文件批量上傳導(dǎo)入數(shù)據(jù)庫,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-11-11
  • IDEA中thymeleaf語法沒有提示的問題及解決

    IDEA中thymeleaf語法沒有提示的問題及解決

    這篇文章主要介紹了IDEA中thymeleaf語法沒有提示的問題及解決,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • JAVA中使用openoffice將Excel轉(zhuǎn)PDF再轉(zhuǎn)圖片功能的實現(xiàn)代碼

    JAVA中使用openoffice將Excel轉(zhuǎn)PDF再轉(zhuǎn)圖片功能的實現(xiàn)代碼

    這篇文章主要介紹了JAVA中使用openoffice將Excel轉(zhuǎn)PDF再轉(zhuǎn)圖片功能實現(xiàn),本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-12-12
  • Java過濾器如何解決存儲型xss攻擊問題

    Java過濾器如何解決存儲型xss攻擊問題

    這篇文章主要介紹了Java過濾器如何解決存儲型xss攻擊問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • redis 獲取 list 中的所有元素操作

    redis 獲取 list 中的所有元素操作

    這篇文章主要介紹了redis 獲取 list 中的所有元素操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • k8s+springboot+CronJob定時任務(wù)部署實現(xiàn)

    k8s+springboot+CronJob定時任務(wù)部署實現(xiàn)

    本文主要介紹了k8s+springboot+CronJob定時任務(wù)部署實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • JAVA數(shù)組練習(xí)題實例講解

    JAVA數(shù)組練習(xí)題實例講解

    這篇文章主要給大家介紹了關(guān)于JAVA數(shù)組練習(xí)題的相關(guān)資料,這是個人總結(jié)的一些關(guān)于java數(shù)組的練習(xí)題,文中通過代碼實例介紹的非常詳細,需要的朋友可以參考下
    2023-08-08

最新評論

冀州市| 丹巴县| 石柱| 太仓市| 永川市| 淳安县| 福鼎市| 鹰潭市| 怀安县| 金门县| 武陟县| 青田县| 湘乡市| 运城市| 吴桥县| 连江县| 北碚区| 印江| 四子王旗| 射阳县| 南皮县| 安塞县| 宣化县| 扶绥县| 宜都市| 静安区| 兴和县| 镇雄县| 荆州市| 临武县| 十堰市| 肃南| 旌德县| 孟村| 布尔津县| 临夏市| 理塘县| 馆陶县| 宜兴市| 阳西县| 内丘县|