LinkedBlockingQueue
Java提供的线程安全的Queue可以分为阻塞队列和非阻塞队列,其中阻塞队列的典型例子是BlockingQueue,非阻塞队列的典型例子是ConcurrentLinkedQueue,在实际应用中要根据实际需要选用阻塞队列或者非阻塞队列。
http://www.cnblogs.com/linjiqin/archive/2013/05/30/3108188.html
public class Basket { // 篮子,能够容纳3个苹果 BlockingQueue<String> basket = new LinkedBlockingQueue<String>(3); public void produce() throws InterruptedException { basket.put("An apple"); } public String consume() throws InterruptedException { return basket.take(); } }
class Producer implements Runnable { private String instance; private Basket basket; public Producer(String instance, Basket basket) { this.instance = instance; this.basket = basket; } public void run() { try { while (true) { System.out.println("生产者准备生产苹果:" + instance); basket.produce(); System.out.println("!生产者生产苹果完毕:" + instance); Thread.sleep(20000); } } catch (InterruptedException ex) { System.out.println("Producer Interrupted"); } } }
class Consumer implements Runnable { private String instance; private Basket basket; public Consumer(String instance, Basket basket) { this.instance = instance; this.basket = basket; } public void run() { try { while (true) { System.out.println("消费者准备消费苹果:" + instance); System.out.println(basket.consume()); System.out.println("!消费者消费苹果完毕:" + instance); Thread.sleep(5000); } } catch (InterruptedException ex) { System.out.println("Consumer Interrupted"); } } }
public class Test { public static void main(String[] args) { Basket basket = new Basket(); ExecutorService service = Executors.newCachedThreadPool(); Producer producer = new Producer("生产者001", basket); //Producer producer2 = new Producer("生产者002", basket); Consumer consumer = new Consumer("消费者001", basket); service.submit(producer); //service.submit(producer2); service.submit(consumer); // 程序运行5s后,所有任务停止 // try { // Thread.sleep(1000 * 5); // } catch (InterruptedException e) { // e.printStackTrace(); // } // service.shutdownNow(); } }
生产者准备生产苹果:生产者001
!生产者生产苹果完毕:生产者001
消费者准备消费苹果:消费者001
An apple
!消费者消费苹果完毕:消费者001
消费者准备消费苹果:消费者001
生产者准备生产苹果:生产者001
!生产者生产苹果完毕:生产者001
An apple
!消费者消费苹果完毕:消费者001
............

浙公网安备 33010602011771号