标签:queue string put 排序 off 数据 cep 信号 except
1.什么是阻塞队列
我们知道,PriorityQueue、LinkedList这些都是非阻塞队列。在我们使用非阻塞队列的时候有一个很大问题,它不会对当前线程产生阻塞,那么在面对类似消费者-生产者的模型时,就必须额外地实现同步策略以及线程间唤醒策略,这个实现起来就非常麻烦。但是有了阻塞队列就不一样了,它会对当前线程产生阻塞,比如一个线程从一个空的阻塞队列中取元素,此时线程会被阻塞直到阻塞队列中有了元素。当队列中有元素后,被阻塞的线程会自动被唤醒(不需要我们编写代码去唤醒)。这样提供了极大的方便性。
2.阻塞队列的种类
阻塞队列本质上就是队列,它主要有一下几种:
3.阻塞队列中的几个主要方法
4.使用(以LinkedBlockingQueue为例)
import java.util.concurrent.LinkedBlockingQueue; public class BlockingQueueDemo { int size = 10; LinkedBlockingQueue<Integer> queue = new LinkedBlockingQueue<>(size); public static void main(String[] args) { BlockingQueueDemo bqd = new BlockingQueueDemo(); Consumer c = bqd.new Consumer(); Productor p = bqd.new Productor(); c.setName("消费者"); p.setName("生产者"); c.start(); p.start(); } class Consumer extends Thread { @Override public void run() { consume(); } private void consume() { while (true) { try { queue.take(); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(Thread.currentThread().getName() + "消费了一个物品,还有" + queue.size() + "个物品"); } } } class Productor extends Thread { @Override public void run() { product(); } private void product() { while (true) { try { queue.put(1); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(Thread.currentThread().getName() + "生产了一个物品,现有" + queue.size() + "个物品"); } } } }
标签:queue string put 排序 off 数据 cep 信号 except
原文地址:https://www.cnblogs.com/ericz2j/p/10283533.html