ブロックキューとブロックスタック


ブロックキューブロックキューはJava 5の同時新機能の内容であり、ブロックキューのインタフェースはjavaである.util.concurrent.BlockingQueue、複数の実装クラスがあります:ArrayBlockingQueue、DelayQueue、LinkedBlockingQueue、PriorityBlockingQueue、SynchronousQueueなど、使い方は大きく異なります.具体的にはJDKドキュメントを表示できます.
package test;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
public class BlockingQueueTest {
 @SuppressWarnings("unchecked")
 public static void main(String[] args) throws InterruptedException {
  BlockingQueue bqueue = new ArrayBlockingQueue(10);
  for (int i = 1; i < 30; i++) {
   bqueue.put(i);
   System.out.println(" :" + i);
  }
  System.out.println("---- ----");
 }
}

 
要素19に出力されると、待機状態になる.ここでは、マルチスレッドでは説明されていません.キューをブロックする必要はありません.4つの処理方法があります.
メソッド処理方法
異常を投げ出す
特殊値を返す
ずっと塞いで
タイムアウト終了
挿入方法
add(e)
offer(e)
put(e)
offer(e,time,unit)
除去方法
remove()
poll()
take()
poll(time,unit)
検査方法
element()
peek()
使用不可
使用不可
放出異常:ブロックされたキューがいっぱいになったときにキューに要素を挿入すると、IllegalStateException(「Queue full」)異常が放出されます.キューが空の場合、キューから要素を取得すると、NoSuchElementException例外が放出されます.特殊な値を返します.挿入メソッドは成功を返し、成功するとtrueを返します.削除方法は、キューから要素を取り出し、そうでなければnullを返してブロックします.ブロックされたキューがいっぱいになると、生産者スレッドがキューにput要素を入れると、キューはデータを取得するまで生産者スレッドをブロックしたり、割り込みに応答して終了したりします.キューが空の場合、消費者スレッドはキューからtake要素を試み、キューが使用可能になるまで消費者スレッドをブロックします.タイムアウト終了:ブロックキューがいっぱいになると、キューは生産者スレッドをブロックし、一定の時間を超えると生産者スレッドは終了します.
JDK 6は6つのブロックキューを提供している:ArrayBlockingQueue,DelayQueue,LinkedBlockingDeque,LinkedBlockingQueue,PriorityBlockingQueue,SynchronousQueue
 
ブロックスタックのブロックスタックはブロックキューと似ているが、Java 6に組み込まれた新しい特性であり、ブロックスタックのインタフェースjavaである.util.concurrent.BlockingDequeにも実装クラスが多く、使い方も似ています
package test;
import java.util.concurrent.BlockingDeque;
import java.util.concurrent.LinkedBlockingDeque;
//  JDK6
public class BlockingDequeTest {
 @SuppressWarnings("unchecked")
 public static void main(String[] args) {
  BlockingDeque deque = new LinkedBlockingDeque(10);
  for (int i = 0; i < 30; i++) {
   try {
    //deque.addFirst(i); //  addFirst 
    deque.putFirst(i);
    //deque.addLast(i); //  
    //deque.putLast(i);
   } catch (Exception e) {
    e.printStackTrace();
   }
   System.out.println(" :" + i);
  }
  System.out.println("---- ----");
 }
}

 
効果は一致していますが、スタックの特性が見えます!
 
ITEYEサイトでjava小強オリジナルを見てください.ありがとうございます.
http://cuisuqiang.iteye.com/  !
自作ブログアドレス:http://www.javacui.com/、内容はITEYEと同期!