Concurrentと委託学習(2)—BlockingQueueの実現クラス

2054 ワード

1、ArrayBlockingQueue
ArrayBlockingQueueクラスはBlockingQueueインタフェースを実現した.ArrayBlockingQueueは境界のあるブロックキューであり、その内部実装はオブジェクトを配列に配置することである.以下に、ArrayBlockingQueueを使用して初期化した例を示します.
BlockingQueue queue = new ArrayBlockingQueue(1024);

queue.put("1");

Object object = queue.take();

2、遅延キューDelayQueue
DelayQueueはBlockingQueueインタフェースを実現した.DelayQueueは、特定の遅延が期限切れになるまで要素を保持します.
要素を入力するには、java.util.concurrent.Delayedインタフェースを実装する必要があります.このインタフェース定義は、次のとおりです.
public interface Delayed extends Comparable

DelayQueueは、各要素のgetDelay()メソッドが返す値の期間後に要素を解放します.0または負の値を返すと、遅延は期限切れとみなされ、DelayQueueの次のtakeが呼び出されたときに要素が解放されます.
3、チェーンブロックキューLinkedBlockingQueue
LinkedBlockingQueueの内部には、要素がチェーン構造(リンクノード)で格納されます.必要であれば、このチェーン構造は上限を選択することができます.上限が定義されていない場合はInteger.MAX_が使用されます.VALUEを上限とする.
BlockingQueue unbounded = new LinkedBlockingQueue();
BlockingQueue bounded = new LinkedBlockingQueue(1024);
bounded.put("Value");
String value = bounded.take();

4、優先順位のあるブロックキューPriorityBlockingQueue
PriorityBlockingQueueクラスはBlockingQueueインタフェースを実現した.PriorityBlockingQueueは、無限の同時キューです.クラスjava.util.PriorityQueueと同じソートルールを使用します.このキューにnull値を挿入できません.PriorityBlockingQueueに挿入されたすべての要素はjava.lang.Comparableインタフェースを実装する必要があります.したがって、キュー内の要素のソートは、自分のComparable実装に依存します.PriorityBlockingQueueは、等しい優先度(compare()==0)を持つ要素に対して特定の動作を強制しないことに注意してください.また、PriorityBlockingQueueからIteratorを取得すると、要素の遍歴が優先順位であることは保証されません.
BlockingQueue queue = new PriorityBlockingQueue();
 //String implements java.lang.Comparable
 queue.put("Value");
 String value = queue.take();

5、同期キューSynchronousQueue
SynchronousQueueクラスはBlockingQueueインタフェースを実現した.SynchronousQueueは特殊なキューで、内部には単一の要素しか収容できません.キューに要素がある場合、新しい要素をキューに挿入しようとするスレッドは、別のスレッドがその要素をキューから抽出するまでブロックされます.同様に、キューが空の場合、キューに要素を抽出しようとするスレッドは、別のスレッドがキューに新しい要素を挿入するまでブロックされます.