阻塞队列ArrayBlockingQueue

来源:互联网 发布:修改ssh命令默认端口 编辑:程序博客网 时间:2024/05/30 23:26

队列包含固定长度队列和不固定长度队列

ArrayBlockingQueue

固定长度的阻塞队列 只有put()和take()方法才具有阻塞功能

代码

package mutithread.blockingqueue;import java.util.concurrent.ArrayBlockingQueue;import java.util.concurrent.BlockingQueue;public class BlockingQueueTest {    public static void main(String[] args) {        final BlockingQueue<Integer> queue = new ArrayBlockingQueue<>(3);        for (int i = 0; i < 2; i++) {            new Thread() {                public void run() {                    while (true) {                        try {                            Thread.sleep((long) (Math.random() * 1000));                            System.out.println(Thread.currentThread().getName() + "准备放数据!");                            queue.put(1);                            System.out.println(Thread.currentThread().getName() + "已经放了数据," + "队列目前有" + queue.size() + "个数据");                        } catch (InterruptedException e) {                            e.printStackTrace();                        }                    }                }            }.start();        }        new Thread() {            public void run() {                while (true) {                    try {                        // 将此处的睡眠时间分别改为100和1000,观察运行结果                        Thread.sleep(1000);                        System.out.println(Thread.currentThread().getName() + "准备取数据!");                        queue.take();                        System.out.println(Thread.currentThread().getName() + "已经取走数据," + "队列目前有" + queue.size() + "个数据");                    } catch (InterruptedException e) {                        e.printStackTrace();                    }                }            }        }.start();    }}

利用两个具有1空间的队列可以实现同步通知的功能
阻塞队列与Semaphore有些相似, 但也不同, 阻塞队列是一方存数据, 另一方释放数据, Semaphore通常则是由同一方设置和释放信号量

原创粉丝点击