BlockingQueue
在java.util.concurrent包中的 BlockingQueue接口类是一种线程安全的队列。通过ReentrantLock实现线程安全,通过Condition实现阻塞和唤醒
BlockingQueue的使用说明
BlockingQueue一般用于这样的场景:一个线程生产对象,另一个线程来消耗对象,
生产线程会持续生产新的对象并把他们插入到队列中,直到队列所能包含对象的最大上限。
如果阻塞队列到达了上限,这时如果尝试插入新的的对象,生产线程将会被阻塞。并且阻塞会一直保持直到消费线程从队列中取出一个对象。
同样,消费线程会持续从阻塞队列中取出对象并处理他们。如果消费线程试图从一个空的队列中取出对象,消费线程将被阻塞住,直到生产线程向队列中加入了一个对象。
消费者
public class Consumer implements Runnable{
private boolean quit;
private BlockingQueue<String> queue;
public Consumer(BlockingQueue<String> queue) {
this.queue = queue;
}
@Override
public void run() {
while (quit){
try {
String take = queue.take();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
生产者
public class Producer implements Runnable {
private BlockingQueue<String> queue;
public Producer(BlockingQueue<String> queue) {
this.queue = queue;
}
@Override
public void run() {
try {
queue.put("1");
queue.put("2");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}