本文共 1363 字,大约阅读时间需要 4 分钟。
BlockingQueue方法有四种形式,其处理操作的方式不同,不能立即满足,但可能在将来某个时候满足:
第一种方法抛出异常
第二种方法返回特殊值(根据操作的不同,可以为null或false)
第三种在操作成功之前无限期阻塞当前线程
第四种在放弃之前仅阻塞给定的最大时间限制,设置阻塞超时时间
下表总结了这些方法:
class Producer implements Runnable { private final BlockingQueue queue; Producer(BlockingQueue q) { queue = q; } public void run() { try { while (true) { queue.put(produce()); } } catch (InterruptedException ex) { ex.printStackTrace(); } } Object produce() { System.out.println(Thread.currentThread().getName() + "线程生产"); return "product"; }}class Consumer implements Runnable { private final BlockingQueue queue; Consumer(BlockingQueue q) { queue = q; } public void run() { try { while (true) { consume(queue.take()); } } catch (InterruptedException ex) { ex.printStackTrace(); } } void consume(Object x) { System.out.println(Thread.currentThread().getName() + "线程消费:"+ x); }}class Setup { void main() { BlockingQueue q = new LinkedBlockingQueue(2); Producer p1 = new Producer(q); Producer p2 = new Producer(q); Consumer c1 = new Consumer(q); Consumer c2 = new Consumer(q); new Thread(p1).start(); new Thread(p2).start(); new Thread(c1).start(); new Thread(c2).start(); }}
转载地址:http://fsyvb.baihongyu.com/