BlockingQueue
タスクをキューに入れ、ExecutorService
ワーカーでタスクを処理する必要があります。
サンプル ソース コード:
final BlockingQueue<String> queue = new LinkedBlockingQueue<String>();
queue.put("test");// Add item here
ExecutorService service = Executors.newFixedThreadPool(10);// specifynumber
// of thread
int numWorkers = 10;
for (int i = 0; i < numWorkers; i++) {
service.submit(new Runnable() {
@Override
public void run() {
while (!Thread.currentThread().isInterrupted()) {
try {
String item = queue.take();
// Process item
} catch (InterruptedException ex) {
Thread.currentThread().interrupt();
break;
}
}
}
});
}
説明:
マネージャーは、ジョブをジョブ キューに指定します (キュー サイズは固定ではありません)。
ジョブを保持するブロッキング キューを宣言します。String
ここにジョブを表すと入力します。
final BlockingQueue<String> queue = new LinkedBlockingQueue<String>();
スレッドは、固定数の ThreadPool によって維持されます。
サイズをExecutorService
合わせてご利用ください。FixedThreadPool
ExecutorService service = Executors.newFixedThreadPool(10);
ジョブ キューにジョブがあるときはいつでも、Frame は ThreadPool からスレッドをジョブに割り当てます。
操作を使用してジョブをキューに送信しますput
。
queue.put("test");
take()
ブロックしている操作を使用する
queue.take();//When there is job it will return the value else will get block
参考文献: