多執行緒下的生產者和消費者-BlockingQueue
1.BlockingQueue:支援兩個附加操作的 Queue,這兩個操作是:檢索元素時等待佇列變為非空,以及儲存元素時等待空間變得可用。
2.BlockingQueue 不接受 null 元素。
3.BlockingQueue 可以是限定容量的。
4.BlockingQueue 實現是執行緒安全的。Queue不是執行緒安全的。因此可以將Blockingqueue用於用於生產者-使用者佇列。
- import java.util.*;
- import java.util.concurrent.*;
- class Producer
- implements Runnable
- {
- private BlockingQueue<String> drop;
- List<String> messages = Arrays.asList(
- “Mares eat oats”,
- “Does eat oats”,
- “Little lambs eat ivy”,
- “Wouldn`t you eat ivy too?”);
- public Producer(BlockingQueue<String> d) { this.drop = d; }
- public void run()
- {
- try
- {
- for (String s : messages)
- drop.put(s);
- drop.put(“DONE”);
- }
- catch (InterruptedException intEx)
- {
- System.out.println(“Interrupted! “ +
- “Last one out, turn out the lights!”);
- }
- }
- }
- class Consumer
- implements Runnable
- {
- private BlockingQueue<String> drop;
- public Consumer(BlockingQueue<String> d) { this.drop = d; }
- public void run()
- {
- try
- {
- String msg = null;
- while (!((msg = drop.take()).equals(“DONE”)))
- System.out.println(msg);
- }
- catch (InterruptedException intEx)
- {
- System.out.println(“Interrupted! “ +
- “Last one out, turn out the lights!”);
- }
- }
- }
- public class ABQApp
- {
- public static void main(String[] args)
- {
- BlockingQueue<String> drop = new ArrayBlockingQueue(1, true);
- (new Thread(new Producer(drop))).start();
- (new Thread(new Consumer(drop))).start();
- }
- }
本文轉自 tianya23 51CTO部落格,原文連結:http://blog.51cto.com/tianya23/683090,如需轉載請自行聯絡原作者
相關文章
- 多執行緒之生產者消費者執行緒
- Java多執行緒——生產者和消費者模式Java執行緒模式
- Java多執行緒15:Queue、BlockingQueue以及利用BlockingQueue實現生產者/消費者模型Java執行緒BloC模型
- Java多執行緒——生產者消費者示例Java執行緒
- Java多執行緒14:生產者/消費者模型Java執行緒模型
- Java 多執行緒學習(執行緒通訊——消費者和生產者)Java執行緒
- python多執行緒+生產者和消費者模型+queue使用Python執行緒模型
- C#多執行緒學習(三) 生產者和消費者C#執行緒
- C# 多執行緒學習(3) :生產者和消費者C#執行緒
- Java多執行緒——消費者與生產者的關係Java執行緒
- java多執行緒:執行緒間通訊——生產者消費者模型Java執行緒模型
- Java 多執行緒基礎(十二)生產者與消費者Java執行緒
- Python-多執行緒及生產者與消費者Python執行緒
- python中多執行緒消費者生產者問題Python執行緒
- 多執行緒-生產者消費者問題程式碼1執行緒
- JAVA執行緒消費者與生產者模型Java執行緒模型
- 使用Python佇列和多執行緒實現生產者消費者Python佇列執行緒
- 關於Java多執行緒實現生產者和消費者的問題Java執行緒
- 多執行緒併發如何高效實現生產者/消費者?執行緒
- 用Python多執行緒實現生產者消費者模式Python執行緒模式
- python 多執行緒實現生產者與消費者模型Python執行緒模型
- 多執行緒-生產者消費者之等待喚醒機制執行緒
- Java多執行緒-併發協作(生產者消費者模型)Java執行緒模型
- 生產者消費者模式--java多執行緒同步方法的應用模式Java執行緒
- Java 多執行緒(Java.Thread)------ 執行緒協作(生產者消費者模式)Java執行緒thread模式
- 多執行緒 -- 移動檔案(生產者,消費者模式應用)執行緒模式
- 執行緒間的協作(2)——生產者與消費者模式執行緒模式
- python執行緒通訊與生產者消費者模式Python執行緒模式
- 多執行緒-生產者消費者問題程式碼2並解決執行緒安全問題執行緒
- Java多執行緒之併發協作生產者消費者設計模式Java執行緒設計模式
- 多執行緒-生產者消費者之等待喚醒機制程式碼優化執行緒優化
- java多執行緒總結六:經典生產者消費者問題實現Java執行緒
- 生產者消費者模式,以及基於BlockingQueue的快速實現模式BloC
- Linux多執行緒消費者和生產者模型例項(互斥鎖和條件變數使用)Linux執行緒模型變數
- java多執行緒之消費生產模型Java執行緒模型
- 多執行緒必考的「生產者 - 消費者」模型,看齊姐這篇文章就夠了執行緒模型
- java學習回顧---生產者與消費者問題以及多執行緒補充Java執行緒
- Java多執行緒程式設計(同步、死鎖、生產消費者問題)Java執行緒程式設計