![image.png](https://img2020.cnblogs.com/other/268922/202003/268922-20200330183801141-1514127119.png)
作業キュースレッドプールのJavaは、同時キューを使用しています。
キューは、一般生産者-消費者のシナリオで使用され、プロセスが並んで待つ必要があります。
こんにちは、私は李富春よ、今日の質問は次のとおりです。
ConcurrentLinkedQueueとLinkedBlockingQueue違いは何ですか?
A:同時キューの安全性は、Javaを提供しているが、待って、テイクの操作を提供し、プットの違いは次の通りです:
同時キュークラス階層
次のようにレベルは以下のとおりです。
消費者の例プロデューサー
package org.example.mianshi.queue;
import java.util.Objects;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
import java.util.stream.IntStream;
/**
* 作者: carter
* 创建日期: 2020/3/30 17:39
* 描述: 生产者消费者例子
*/
public class ConsumerProduceApp {
public static void main(String[] args) {
BlockingQueue<String> queue = new ArrayBlockingQueue<>(1000);
Producer producer = new Producer(queue);
Consumer consumer = new Consumer(queue);
producer.start();
consumer.start();
try {
producer.join();
consumer.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public static class Consumer extends Thread {
private BlockingQueue<String> blockingQueue;
public Consumer(BlockingQueue<String> blockingQueue) {
this.blockingQueue = blockingQueue;
}
@Override
public void run() {
String msg = "";
do {
try {
msg = blockingQueue.take();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(msg);
} while (!Objects.equals(msg, "quit"));
}
}
public static class Producer extends Thread {
private BlockingQueue<String> blockingQueue;
public Producer(BlockingQueue<String> blockingQueue) {
this.blockingQueue = blockingQueue;
}
@Override
public void run() {
IntStream.rangeClosed(1, 100)
.forEach(i -> {
try {
blockingQueue.put("msg" + i);
} catch (InterruptedException e) {
e.printStackTrace();
}
});
try {
blockingQueue.put("quit");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
有界キュー:
持つArrayBlockingQueue:固定容量、連続したメモリ・キュー
LinkedBlockingQueue:有界キューのサイズが提供されていない設定が無制限キューた
SychronousQueue:容量は0、テイクでは、操作は各待機入れ
:無制限キュー
優先度つきキュー:優先無制限キュー
DelayedQueueました:遅れアンバウンド形式のキュー
キューを選択
有界かどうかに応じて:一般ArrayBlockingQueue、LinkedBlockingQueueを選択
メモリ気密性に従って:ArrayBlockingQueue
スループットによると:LinkedBlockingQueueを
リレー以下のスレッドキュー情報ハイパフォーマンス:SynchronouseQueue
概要
このセクションでは、ConcurrentBlockingQueueとLinkedBlockingQueue差は、キューレベルのJavaプランを見直し、大きな機会を提供します。
消費者の簡単な例の生産者は、キューの基本的な使用方法を示します。
最後に、異なるシナリオの下でキューの選択。
元は容易ではない、ソースを明記してください。