Mark :BlockingQueue

2024-04-06 20:08
文章标签 mark blockingqueue

本文主要是介绍Mark :BlockingQueue,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

https://blog.csdn.net/smuedward/article/details/54574938

(一)BlockingQueue的原理

1. 什么是BlockingQueue? 
阻塞队列(BlockingQueue)是一个支持两个附加操作的队列。这两个附加的操作是:在队列为空时,获取元素的线程会等待队列变为非空。当队列满时,存储元素的线程会等待队列可用。阻塞队列常用于生产者和消费者的场景,生产者是往队列里添加元素的线程,消费者是从队列里拿元素的线程。阻塞队列就是生产者存放元素的容器,而消费者也只从容器里拿元素。

2. BlockingQueue的核心方法: 
2.1放入数据: 
  offer(anObject):表示如果可能的话,将anObject加到BlockingQueue里,即如果BlockingQueue可以容纳, 
    则返回true,否则返回false.(本方法不阻塞当前执行方法的线程) 
  offer(E o, long timeout, TimeUnit unit),可以设定等待的时间,如果在指定的时间内,还不能往队列中 
    加入BlockingQueue,则返回失败。 
  put(anObject):把anObject加到BlockingQueue里,如果BlockQueue没有空间,则调用此方法的线程被阻断 
    直到BlockingQueue里面有空间再继续. 
2.2 获取数据: 
  poll(time):取走BlockingQueue里排在首位的对象,若不能立即取出,则可以等time参数规定的时间, 
    取不到时返回null; 
  poll(long timeout, TimeUnit unit):从BlockingQueue取出一个队首的对象,如果在指定时间内, 
    队列一旦有数据可取,则立即返回队列中的数据。否则知道时间超时还没有数据可取,返回失败。 
  take():取走BlockingQueue里排在首位的对象,若BlockingQueue为空,阻断进入等待状态直到 
    BlockingQueue有新的数据被加入; 
  drainTo():一次性从BlockingQueue获取所有可用的数据对象(还可以指定获取数据的个数), 

    通过该方法,可以提升获取数据效率;不需要多次分批加锁或释放锁。 


1ArrayBlockingQueue:一个由数组支持的有界阻塞队列,规定大小的BlockingQueue,其构造函数必须带一个int参数来指明其大小.其所含的对象是以FIFO(先入先出)顺序排序的。

2LinkedBlockingQueue大小不定的BlockingQueue,若其构造函数带一个规定大小的参数,生成的BlockingQueue有大小限制,若不带大小参数,所生成的BlockingQueue的大小由Integer.MAX_VALUE来决定.其所含的对象是以FIFO(先入先出)顺序排序的。 

LinkedBlockingQueue 可以指定容量,也可以不指定,不指定的话,默认最大是Integer.MAX_VALUE,其中主要用到puttake方法,put方法在队列满的时候会阻塞直到有队列成员被消费,take方法在队列空的时候会阻塞,直到有队列成员被放进来。

LinkedBlockingQueueArrayBlockingQueue区别:

LinkedBlockingQueueArrayBlockingQueue比较起来,它们背后所用的数据结构不一样,导致LinkedBlockingQueue的数据吞吐量要大于ArrayBlockingQueue,但在线程数量很大时其性能的可预见性低于ArrayBlockingQueue.




这篇关于Mark :BlockingQueue的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/880713

相关文章

Java并发编程之——BlockingQueue(队列)

一、什么是BlockingQueue BlockingQueue即阻塞队列,从阻塞这个词可以看出,在某些情况下对阻塞队列的访问可能会造成阻塞。被阻塞的情况主要有如下两种: 1. 当队列满了的时候进行入队列操作2. 当队列空了的时候进行出队列操作123 因此,当一个线程试图对一个已经满了的队列进行入队列操作时,它将会被阻塞,除非有另一个线程做了出队列操作;同样,当一个线程试图对一个空

MARK图像处理与计算机视觉基础,经典以及最近发展

图像处理与计算机视觉的经典书籍 *************************************************************************************************************** 本文章的源作者是   杨晓冬  (个人邮箱:xdyang.ustc@gmail.com)。 原文的链接是 http://www.iask.

Java必知必会---队列BlockingQueue家族

Java必知必会---队列BlockingQueue家族 IT小鳄鱼  2017-12-04 19:21:35 Java必知必会---队列BlockingQueue家族   队列是我们在开发中经常会使用到的一种数据结构,并且在多线程资源共享与数据协调的场景中,队列也是我们最喜欢的选择之一,尤其是在生产者与消费者模型中。下面我们就介绍一下在java中常用的BlockingQueue家

LinkedBlockingQueue比BlockingQueue吞吐量高的原因?

目录 1.首先吞吐量是什么?如何衡量程序的吞吐量?2. LinkedBlockingQueue 吞吐量高的原因? 1.首先吞吐量是什么?如何衡量程序的吞吐量? 吞吐量是指在一定时间内系统或程序处理的任务数量或数据量。在计算机领域,吞吐量通常用来衡量系统、程序或设备在单位时间内处理的工作量或数据量,是评估系统性能的重要性能之一。可以从吞吐量通常可以通过以下方式进行衡量: 任务完成数

pytest.mark简介

pytest.mark 是 pytest 框架中的一个功能,它允许你标记测试函数或类,这样你就可以在运行测试时选择性地执行它们。使用标记,你可以实现以下功能: 条件执行:你可以根据标记来决定哪些测试应该被执行。分组:可以将测试分为不同的组,比如按功能、重要性或速度分组。参数化:可以使用 pytest.mark.parametrize 装饰器来为测试函数提供多个参数集。跳过测试:使用 pytest

BlockingQueue 接口源码学习

java version “1.8.0_221” Java™ SE Runtime Environment (build 1.8.0_221-b11) Java HotSpot™ 64-Bit Server VM (build 25.221-b11, mixed mode) 介绍 BlockingQueue 是一个接口,并且它还继承了 Queue 接口,在继承 Queue 接口的基础上,

12、深入解析阻塞队列BlockingQueue

深入解析阻塞队列BlockingQueue 阻塞队列介绍队列Queue接口阻塞队列应用场景 JUC包下的阻塞队列 ArrayBlockingQueueArrayBlockingQueue使用ArrayBlockingQueue的原理数据结构入队put方法为什么ArrayBlockingQueue对数组操作要设计成双指针?出队take方法 LinkedBlockingQueueLinkedB

公司间销售订单发运后,在公司间采购订单上找不到mark shipped按钮

公司间销售订单发运后,在公司间采购订单上找不到mark shipped按钮 虽然知道是权限不足的问题,但一直也没有找到。后来同事提醒,才发现是item fulfillment 权限至少应该是Create。 可以参照SuiteAnswers Id : 29039。 将直发采购订单标记为已发运需要这些权限: 采购订单至少为View物料履行至少为创建履行订单至少为编辑。

BlockingQueue简单使用

明确BlockingQueue的作用以及使用场景;悉知BlockingQueue的基本使用 1、BlockingQueue一般用于排队的列子,比如多线程的批量下载或者上传,有效控制队列高效执行, 2、BlockingQueue的实例化以及怎么去使用 //实例化BlockingQueue并指定队列的容量为10 ,超出10将会阻塞,直到basket.take()消费才会继续添加进队列中去pr

Pytest框架中pytest.mark功能

文章目录 mark功能 1. 使用@pytest.mark.skip 2. 使用@pytest.mark.skipif 3. 使用 @pytest.mark.xfail 4使用@pytest.mark.parametrize 5 使用@pytest.mark.自定义标记 6 使用@pytest.mark.usefixtures pytest 的mark功能在pytest官方文档