マルチスレッドBlockingQueueでのデータの読み書き
9365 ワード
demo
マルチスレッドを使用してBlockingQueueでデータを読み書きする簡単な例です
マルチスレッドを使用してBlockingQueueでデータを読み書きする簡単な例です
public class BlockQueueClient {
int threadNum=4;
int clientNum=2000;
private BlockingQueue<String> queue = new LinkedTransferQueue<String>();
public static void main(String[] args) {
BlockQueueClient blockQueueClient = new BlockQueueClient();
blockQueueClient.producer();
blockQueueClient.consumer();
}
public void producer() {
ExecutorService exec = Executors.newFixedThreadPool(threadNum);
final CountDownLatch doneSignal = new CountDownLatch(clientNum);
if (queue.isEmpty()){
Runnable run = new Runnable() {
public void run() {
try {
queue.offer("1");
System.out.println(" BlockingQueue");
Thread.sleep(1000);
} catch (Exception e) {
e.printStackTrace();
}
doneSignal.countDown();// countDown() , 1
}
};
exec.execute(run);
}
}
public void consumer () {
ExecutorService exec = Executors.newFixedThreadPool(3);
for (int i = 0; i < 20; i++) {
Runnable run = new Runnable() {
@Override
public void run() {
System.out.println(" BlockingQueue :"+queue.poll());
}
};
exec.execute(run);
}
}
}