java併發-BlockingQueue
java.util.concurrent.BlockingQueue 介面有以下阻塞佇列的實現
- ArrayBlockingQueue:規定大小的BlockingQueue,其建構函式必須帶一個int引數來指明其大小.其所含的物件是以FIFO(先入先出)順序排序的.
- LinkedBlockingQueue:大小不定的BlockingQueue,若其建構函式帶一個規定大小的引數,生成的BlockingQueue有大小限制,若不帶大小引數,所生成的BlockingQueue的大小由Integer.MAX_VALUE來決定.其所含的物件是以FIFO(先入先出)順序排序的
- PriorityBlockingQueue:類似於LinkedBlockQueue,但其所含物件的排序不是FIFO,而是依據物件的自然排序順序或者是建構函式的Comparator決定的順序.
- SynchronousQueue:特殊的BlockingQueue,對其的操作必須是放和取交替完成的.
FIFO 佇列 :LinkedBlockingQueue、ArrayListBlockingQueue(固定長度)
優先順序佇列 :PriorityBlockingQueue
提供了阻塞的 take() 和 put() 方法:如果佇列為空 take() 將阻塞,直到佇列中有內容;如果佇列為滿 put() 將阻塞,指到佇列有空閒位置。
package com.br.lucky.utils;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
/**
* @author 10400
* @create 2018-04-20 1:52
*/
public class BlockingQueueDemo {
private static BlockingQueue<String> queue = new ArrayBlockingQueue<>(5);
private static class Producer extends Thread {
@Override
public void run() {
try {
Thread.sleep(5000);
double random = Math.random();
queue.put(""+random);
System.out.println("produce :" + random);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
private static class Consumer extends Thread {
@Override
public void run() {
try {
Thread.sleep(3000);
String product = queue.take();
System.out.println("consume :"+product);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
for (int i = 0; i < 2; i++) {
Producer producer = new Producer();
producer.start();
}
for (int i = 0; i < 5; i++) {
Consumer consumer = new Consumer();
consumer.start();
}
for (int i = 0; i < 3; i++) {
Producer producer = new Producer();
producer.start();
}
}
}
相關文章
- 解讀 Java 併發佇列 BlockingQueueJava佇列BloC
- Java併發系列 — 阻塞佇列(BlockingQueue)Java佇列BloC
- 乾貨|解讀Java併發佇列BlockingQueueJava佇列BloC
- Java併發指南11:解讀 Java 阻塞佇列 BlockingQueueJava佇列BloC
- 原始碼|併發一枝花之BlockingQueue原始碼BloC
- java併發程式設計工具類JUC第一篇:BlockingQueue阻塞佇列Java程式設計BloC佇列
- Java併發包原始碼學習系列:阻塞佇列BlockingQueue及實現原理分析Java原始碼佇列BloC
- Java併發程式設計:4種執行緒池和緩衝佇列BlockingQueueJava程式設計執行緒佇列BloC
- [Java併發程式設計實戰] 阻塞佇列 BlockingQueue(含程式碼,生產者-消費者模型)Java程式設計佇列BloC模型
- Java併發---併發理論Java
- [Java併發]Java
- Java併發指南14:Java併發容器ConcurrentSkipListMap與CopyOnWriteArrayListJava
- [Java併發]ReentrantLockJavaReentrantLock
- [Java併發]LockJava
- Java併發-CopyOnWriteArrayListJava
- Java併發容器Java
- Java併發-ScheduledThreadPoolExecutorJavathread
- Java併發——ConditionJava
- Java併發——ReentrantLockJavaReentrantLock
- Java併發 -- JMMJava
- 淺談Java併發Java
- 備戰-Java 併發Java
- Java併發工具篇Java
- java併發之ConcurrentLinkedQueueJava
- java併發之synchronizedJavasynchronized
- Java併發---concurrent包Java
- Java 高併發思路Java
- Java併發——ScheduledThreadPoolExecutor分析Javathread
- java併發簡述Java
- Java併發5:ConcurrentHashMapJavaHashMap
- Java併發4:鎖Java
- Java併發——ThreadLocal分析Javathread
- Java併發程式設計-鎖及併發容器Java程式設計
- Java併發(9)- 從同步容器到併發容器Java
- Java併發指南1:併發基礎與Java多執行緒Java執行緒
- java高併發系列 - 第21天:java中的CAS操作,java併發的基石Java
- java併發程式設計系列:java併發程式設計背景知識Java程式設計
- Java併發(一)----程式、執行緒、並行、併發Java執行緒並行