java基础之线程阻塞队列

潇湘剑雨 潇湘剑雨     2022-08-02     739

关键词:

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

    阻塞队列还有很多实现类,用来满足各种复杂的需求:BlockingQueue、ArrayBlockingQueue, DelayQueue, LinkedBlockingQueue, PriorityBlockingQueue, SynchronousQueue

package unit_fifteen;

import java.util.concurrent.BlockingQueue;
import java.util.concurrent.ArrayBlockingQueue;

/**
 * Java线程:新特征-阻塞队列
 * 
 */
public class Test {
    public static void main(String[] args) throws InterruptedException {
        BlockingQueue bqueue = new ArrayBlockingQueue(20);
        for (int i = 0; i < 30; i++) {
            // 将指定元素添加到此队列中,如果没有可用空间,将一直等待(如果有必要)。
            bqueue.put(i);
            System.out.println("向阻塞队列中添加了元素:" + i);
        }
        System.out.println("程序到此运行结束,即将退出----");
    }
}

 

java并发之阻塞队列

...元素的操作会被阻塞。试图从空的阻塞队列中获取元素的线程将会被阻塞,直到其他的线程往空的队列插入新的元素。同样,试图往已满的阻塞队列 查看详情

java基础教程:多线程基础——阻塞队列

Java基础教程:多线程基础(3)——阻塞队列快速开始引入问题  生产者消费者问题是线程模型中的经典问题:生产者和消费者在同一时间段内共用同一存储空间,生产者向空间里生产数据,而消费者取走数据。模拟情景  ... 查看详情

线程小酌之java中的阻塞队列(代码片段)

...f0c;发现功能很强大,其中之一就是工作中多次用到的线程工具类BlockingQueue。在实际开发工作和面试过程中,经常会考察对于该工具类的使用和理解。1.什么是阻塞队列?阻塞队列(BlockingQueue)是一 查看详情

多线程编程-之并发编程:阻塞队列

...urrentHashMap、CopyOnWriteArrayList),这些工具都为我们编写多线程程序提供了很大的方便。今天我们来讨论另外一类容器:阻塞队列。  在前面我们接触的队列都是非阻塞队列,比如PriorityQueue、LinkedList(LinkedList是双向链表,它实... 查看详情

阻塞队列(blockingqueue)(代码片段)

...全高效的数据处理的功能。所谓阻塞队列,是在普通队列基础上实现了阻塞线程的功能:  队列为空时,获取元素的线程阻塞,直到队列变为非空。  当队列满时,存储元素的线程阻塞,直到队列可用(非满)。以下是阻塞... 查看详情

javaweb基础知识--多线程(阻塞队列+生产消费者模型)(代码片段)

文章目录阻塞队列阻塞队列的使用生产消费者模型使用场景1.解耦合2.削峰填谷简单模型代码BlockingQueue的具体实现阻塞队列  BlockingQueue是Java标准库中提供的阻塞队列,底层是由链表、数组实现的,实现了Queue接口所以Bl... 查看详情

javaweb基础知识--多线程(阻塞队列+生产消费者模型)(代码片段)

文章目录阻塞队列阻塞队列的使用生产消费者模型使用场景1.解耦合2.削峰填谷简单模型代码BlockingQueue的具体实现阻塞队列  BlockingQueue是Java标准库中提供的阻塞队列,底层是由链表、数组实现的,实现了Queue接口所以Bl... 查看详情

java并发之blockingqueue

...作2.当队列空了的时候进行出队列操作因此,当一个线程试图对一个已经满了的队列进行入队列操作时,它将会被阻塞,除非有另 查看详情

java基础之多线程

一、线程基本知识1、线程与进程  进程:执行中的程序  线程:轻量级的进程    线程本身不能单独进行,必须放在一个进程中才能执行。2、Java的线程模型  1、新建状态    线程被创建之后便处于新建状态。... 查看详情

java同步数据结构之concurrentlinkedqueue

...就是通过CAS代替加锁来实现的高效的非阻塞队列。当许多线程共享对公共集合的访问时,ConcurrentLinkedQueue是一个合适的选择。与大多数其他并发集合实现一样,该类不允许使用空元素。ConcurrentLinkedQueue是一个基于链表的无界线程 查看详情

线程池阻塞队列之arrayblockingqueue(代码片段)

ArrayBlockingQueue介绍ArrayBlockingQueue是数组实现的线程安全的有界的阻塞队列。线程安全是指,ArrayBlockingQueue内部通过“互斥锁”保护竞争资源,实现了多线程对竞争资源的互斥访问。有界是指,ArrayBlockingQueue对应的数组是有... 查看详情

java多线程_阻塞队列

...们使用非阻塞队列的时候有一个很大问题,它不会对当前线程产生阻塞,那么在面对类似消费者-生产者的模型时,就必须额外地实现同步策略以及线程间唤醒策略,这个实现起来就非常麻烦。但是有了阻塞队列就不一样了,它... 查看详情

juc-多线程之阻塞队列blockingqueue(代码片段)

一、队列队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。和栈一样,队列是一种操作受限制的线性表,进行插入操作的端称为队尾,,进行删... 查看详情

java阻塞队列和线程池原理(代码片段)

...8;并非所有方式都阻塞)③阻塞队列简单使用【2】Java线程池一、我们为什么需要Java线程池?使用它的好处是什么?①降低资源消耗。②提高响应速度。③提高线程的可 查看详情

阻塞队列之arrayblockingqueue源码分析

...,典型的应用场景比如生产者消费者场景,一个线程从队列拿数据,另外一个线程从队列放数据,当队列为空时,阻塞消费者。是一个线程安全的类,下面看看类的几个属性字段:/**队列的总长度,... 查看详情

java多线程进阶juc工具集(代码片段)

目录1、阻塞队列2、CountDownLatch2.1、基础应用2.2、应用场景2.3、原理分析3、Semaphore4、CyclicBarrier1、阻塞队列队列是一种线程表,可以一端插入,一端删除,是先进先出的基础结构。阻塞队列,需要支持两种情况在... 查看详情

java多线程进阶juc工具集(代码片段)

目录1、阻塞队列2、CountDownLatch2.1、基础应用2.2、应用场景2.3、原理分析3、Semaphore4、CyclicBarrier1、阻塞队列队列是一种线程表,可以一端插入,一端删除,是先进先出的基础结构。阻塞队列,需要支持两种情况在... 查看详情

java并发(10)-简单聊聊jdk中的七大阻塞队列

...了BlockingQueue接口,BlockingQueue接口在java.util包Queue接口的基础上提供了put(e)以及take()两个阻塞方法。他的主要使用场景就是多线程下的生产者消费者模式,生产者线程通过put(e)方法将生产元素,消费者线程通过take()消费元素。除... 查看详情