zoukankan      html  css  js  c++  java
  • Java多线程-新特征-阻塞队列ArrayBlockingQueue

    阻塞队列是Java5线程新特征中的内容,Java定义了阻塞队列的接口java.util.concurrent.BlockingQueue,阻塞队列的概念是,一个指定长度的队列,如果队列满了,添加新元素的操作会被阻塞等待,直到有空位为止。同样,当队列为空时候,请求队列元素的操作同样会阻塞等待,直到有可用元素为止。

    有了这样的功能,就为多线程的排队等候的模型实现开辟了便捷通道,非常有用。

    java.util.concurrent.BlockingQueue继承了java.util.Queue接口,可以参看API文档。

    package cn.thread;
    
    import java.util.concurrent.ArrayBlockingQueue;
    import java.util.concurrent.BlockingQueue;
    
    /**
     * 阻塞队列
     * 
     * @author 林计钦
     * @version 1.0 2013-7-25 下午04:59:02
     */
    public class ArrayBlockingQueueTest {
        public static void main(String[] args) throws InterruptedException {
            BlockingQueue queue = new ArrayBlockingQueue(20);
            for (int i = 0; i < 30; i++) {
                // 将指定元素添加到此队列中,如果没有可用空间,将一直等待(如果有必要)。
                queue.put(i);
                System.out.println("向阻塞队列中添加了元素:" + i);
            }
            System.out.println("程序到此运行结束,即将退出----");
        }
    }
    向阻塞队列中添加了元素:0
    向阻塞队列中添加了元素:1
    向阻塞队列中添加了元素:2
    向阻塞队列中添加了元素:3
    向阻塞队列中添加了元素:4
    向阻塞队列中添加了元素:5
    向阻塞队列中添加了元素:6
    向阻塞队列中添加了元素:7
    向阻塞队列中添加了元素:8
    向阻塞队列中添加了元素:9
    向阻塞队列中添加了元素:10
    向阻塞队列中添加了元素:11
    向阻塞队列中添加了元素:12
    向阻塞队列中添加了元素:13
    向阻塞队列中添加了元素:14
    向阻塞队列中添加了元素:15
    向阻塞队列中添加了元素:16
    向阻塞队列中添加了元素:17
    向阻塞队列中添加了元素:18
    向阻塞队列中添加了元素:19

    可以看出,输出到元素19时候,就一直处于等待状态,因为队列满了,程序阻塞了。

  • 相关阅读:
    Yield Usage Understanding
    Deadclock on calling async methond
    How to generate file name according to datetime in bat command
    Run Unit API Testing Which Was Distributed To Multiple Test Agents
    druid的关键参数+数据库连接池运行原理
    修改idea打开新窗口的默认配置
    spring boot -thymeleaf-url
    @pathvariable和@RequestParam的区别
    spring boot -thymeleaf-域对象操作
    spring boot -thymeleaf-遍历list和map
  • 原文地址:https://www.cnblogs.com/linjiqin/p/3214703.html
Copyright © 2011-2022 走看看