package testing.queue; import java.util.Random; import java.util.concurrent.BlockingQueue; import java.util.concurrent.LinkedBlockingQueue; /** * Created by IntelliJ IDEA. * User: mateusz * Date: 14.04.12 * Time: 19:41 */ class Producer implements Runnable { private final BlockingQueue<String> queue; String dupa = new String("a"); Producer(BlockingQueue q) { queue = q; } public void run() { try { int i = 10 ; Random r = new Random(); while (i-- > 0) { Thread.sleep(r.nextInt(5)); queue.put(produce()); } } catch (InterruptedException ex) { } } String produce() { dupa = dupa + "a"; return dupa; } } class Consumer implements Runnable { private final BlockingQueue<String> queue; private String consumerName; Consumer(BlockingQueue q, String consumerName) { queue = q; this.consumerName = consumerName; } public void run() { try { while (true) { consume(queue.take()); } } catch (InterruptedException ex) { } } void consume(String x) { System.out.println(consumerName + x); } } public class BlockingQueueExample { public static void main(String[] args) { BlockingQueue<String> q = new LinkedBlockingQueue<String>(); Producer p = new Producer(q); Consumer c1 = new Consumer(q, "First Consumer "); Consumer c2 = new Consumer(q, "Second Consumer "); new Thread(p).start(); new Thread(c1).start(); new Thread(c2).start(); } }