阻塞队列
对于许多线程问题, 可以通过使用一个或多个队列以优雅且安全的方式将其形式化。生产者线程向队列插人元素, 消费者线程则取出它们。 使用队列, 可以安全地从一个线程向另 一个线程传递数据。 在使用队列的情况下,不需要同步,无需考虑线程之间的安全问题。(当然, 线程安全的队列类的实现者不能不考虑锁和条 件, 但是, 那是他们的问题而不是你的问题。) 当试图向队列添加元素而队列已满, 或是想从队列移出元素而队列为空的时候, 阻塞队 列(blocking queue ) 导致线程阻塞。 在协调多个线程之间的合作时, 阻塞队列是一个有用的 工具。 工作者线程可以周期性地将中间结果存储在阻塞队列中。 其他的工作者线程移出中间 结果并进一步加以修改。 队列会自动地平衡负载。 如果第一个线程集运行得比第二个慢, 第 二个线程集在等待结果时会阻塞。 如果第一个线程集运行得快, 它将等待第二个队列集赶上 来。 在JDK中,java.util.concurrent.BlockingQueue接口定义了阻塞队列的方法: 阻塞队列方法分为以下 3 类, 这取决于当队列满或空时它们的响应方式。 如果将队列当 作线程管理工具来使用, 将要用到 put 和 take 方法。 当试图向满的队列中添加或从空的队列 中移出元素时, add、 remove 和 element 操作抛出异常。 当然, 在一个多线程程序中,