阻塞队列的使用案例
import java.util.Random; import java.util.concurrent.LinkedTransferQueue; import java.util.concurrent.TransferQueue; public class TransferQueueLearn { public static void main(String[] args) { TransferQueue<String> queue = new LinkedTransferQueue<String>(); Thread productor = new Thread(new Productor(queue)); productor.setDaemon(true); productor.start(); for (int i = 0; i < 10; i++) { Thread consumer = new Thread(new Consumer(queue)); consumer.setDaemon(false); consumer.start(); } } } class Productor implements Runnable { private final TransferQueue<String> queue; public Productor(TransferQueue<String> queue) { this.queue = queue; } public String product() { return "Your lucky number is " + new Random().nextInt(100) + "director to consumer"; } public String product2() { return "Your lucky number is " + new Random().nextInt(100) + "director to queue"; } @Override public void run() { while (true) { try { if (queue.hasWaitingConsumer()) { queue.transfer(product()); System.out.println("product:--" + queue.size()); } else { queue.put(product2()); System.out.println("product:--" + queue.size()); } } catch (InterruptedException e) { e.printStackTrace(); } } } } class Consumer implements Runnable { private final TransferQueue<String> queue; public Consumer(TransferQueue<String> queue) { this.queue = queue; } @Override public void run() { try { System.out.println("Consumer" + Thread.currentThread().getName() + queue.take()); System.out.println("consumer:--" + queue.size()); } catch (InterruptedException e) { e.printStackTrace(); } } }
posted on 2015-12-24 16:21 zhaojunyang 阅读(411) 评论(0) 收藏 举报
浙公网安备 33010602011771号