ブロックキューとブロックスタック
ブロックキューブロックキューはJava 5の同時新機能の内容であり、ブロックキューのインタフェースはjavaである.util.concurrent.BlockingQueue、複数の実装クラスがあります:ArrayBlockingQueue、DelayQueue、LinkedBlockingQueue、PriorityBlockingQueue、SynchronousQueueなど、使い方は大きく異なります.具体的にはJDKドキュメントを表示できます.
要素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にも実装クラスが多く、使い方も似ています
効果は一致していますが、スタックの特性が見えます!
ITEYEサイトでjava小強オリジナルを見てください.ありがとうございます.
http://cuisuqiang.iteye.com/ !
自作ブログアドレス:http://www.javacui.com/、内容はITEYEと同期!
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と同期!