java并发编程--并发队列

java并发编程(十五)——常见的几种阻塞队列 前言 我们来看一下Java中常见的几种的阻塞队列的相关知识。 主要并发队列 Java中队列的接口是Queue,其实现类如下图所示: 分为阻塞队列和非阻塞队列两种。 何为阻塞队列 阻塞队列,也就是BlockingQueue,是一个接口,它的源码定义如下: public interface BlockingQueue<E> extends Queue<E> { void put(E e) throws InterruptedException; boolean offe 阅读详情
/**
 * 并发Queue
 * 在并发队列上JDK提供了两套实现,
 * 一个是ConcurrentLinKedQueue为代表的高性能队列
 * 一个是BlockingQueue接口为代表的阻塞队列,无论哪种都继承自Queue
 */
public class ConcurrentQueueDemo {
    
}
package cn.bufanli.test.Queue;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.*;

/**
 * ConcurrentLinKedQueue:是一个适用于高并发下的队列,通过无锁的方式,实现了高并发状态下的高性能,
 * 通常ConcurrentLinKedQueue性能好过BlockingQueue.他是基于链接节点的无界线线程安全队列
 * 改队列的元素遵循先进先出的原则,头是最先加入的,尾是最近加入的,该队列不允许null元素
 * 重要方法:
 * add()和offer()都是加入元素的方法(在ConcurrentLinKedQueue中,这俩方法没有任何区别)
 * poll()和peek() 都是取头元素节点,区别在于前者会删除元素,后者不会.
 */
public class ConcurrentLinKedQueueDemo {
    public static void main(String[] args) {
       /* //高性能无阻塞无界队列:ConcurrentLinkedQueue
        ConcurrentLinkedDeque<String> q = new ConcurrentLinkedDeque<>();
        q.offer("a");
        q.offer("b");
        q.offer("c");
        q.add("d");
        System.out.println(q.poll());//a从头部取出并且删除
        System.out.println(q.size());//3
        System.out.println(q.peek());//b
        System.out.println(q.size());//3*/

         /*ArrayBlockingQueue<String> array = new ArrayBlockingQueue<String>(5);
         array.put("a");
         array.put("b");
         array.add("c");
         array.add("d");
         array.add("e");
         array.add("f");
         //a 要塞入的值,3 等待时间 ,单位 3秒塞不进去就返回false
         System.out.println(array.offer("a", 3, TimeUnit.SECONDS));*/
        //阻塞队列
        /*LinkedBlockingQueue<String> q = new LinkedBlockingQueue<String>();
        q.offer("a");
        q.offer("b");
        q.offer("c");
        q.offer("d");
        q.offer("e");
        q.add("f");
        //System.out.println(q.size());

        //		for (Iterator iterator = q.iterator(); iterator.hasNext();) {
        //			String string = (String) iterator.next();
        //			System.out.println(string);
        //		}

        List<String> list = new ArrayList<String>();
        System.out.println(q.drainTo(list, 3));
        System.out.println(list.size());
        for (String string : list) {
            System.out.println(string);
        }
*/

        final SynchronousQueue<String> q = new SynchronousQueue<String>();
        Thread t1 = new Thread(()->{
            try {
                System.out.println(q.take());
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        });
        t1.start();
        Thread t2 = new Thread(()->{
            q.add("asdasd");
        });
        t2.start();
    }
}

 

Java并发编程系列26:ThreadPoolExecutord的等待队列 ThreadPoolExecutor自定义线程(2) 待续 阅读详情

相关推荐

QT项目实战:如何在正点原子Linux开发板上集成CVR-100UC身份证阅读器(附完整代码)

本文详细介绍了在正点原子Linux开发板上集成CVR-100UC身份证阅读器的完整实战流程。内容涵盖驱动适配、库文件部署、QT项目框架搭建、核心功能封装以及界面集成,并提供了完整的代码示例,帮助开发者快速实现嵌入式环境下的身份证信息读取功能。

yyy34的博客 257

java并发编程之队列

本文代码示例已放入github:请点击我 快速导航------>src.main.java.yq.Thread.MyQueue 在开始讲解队列之前我们先了解一下下面这三个东西 CountDownLatch(计数器) CyclicBarrier(屏障) Semaphore(计数信号量) 他们三个是干什么的呢?有什么用?那我们接下来慢慢讲解。 实现方法:CountDownLatch ...

qq_40053836的博客 397

VFIO框架源码分析(二十二)- IOMMUFD 的脏页跟踪与 Dirty Bits 读取

在虚拟化热迁移(Live Migration)的场景中,脏页追踪(Dirty Page Tracking)是最具挑战性的环节之一。它的核心任务是实时捕获设备(DMA)对内存的写操作,以便 VMM(如 QEMU)知道哪些内存页需要被重新传输到目标主机。在强耦合与粗粒度:脏页追踪是绑定在 Container 上的。这意味着,如果一个 Container 内有多个设备,哪怕只有一个设备在写内存,脏页追踪也会影响 Container 内的所有设备。软件模拟开销大。

qq_36071928的博客 1042

Java 并发队列详解

对head的更新也是同样的道理,虽然,这样设计会多出在循环中定位队尾节点,但总体来说读的操作效率要远远高于写的性能,因此,多出来的在循环中定位尾节点的操作的性能损耗相对而言是很小的。ConcurrentLinkedQueue通过无锁来做到了更高的并发量,是个高性能的队列,但是使用场景相对不如阻塞队列常见,毕竟取数据也要不停的去循环,不如阻塞的逻辑好设计,但是在并发量特别大的情况下,是个不错的选择,性能上好很多,而且这个队列的设计也是特别费力,尤其的使用的改良算法和对哨兵的处理。也就是说,它是有限的。

MrLee的博客 2038

Proteus仿真实战:基于IIC驱动SSD1306的0.96英寸OLED显示方案解析

本文详细解析了在Proteus仿真环境中基于IIC驱动SSD1306的0.96英寸OLED显示方案。从硬件搭建、IIC接口连接、软件驱动移植到常见问题排查,提供了全面的实战指导,帮助开发者快速实现OLED显示功能并优化性能。

weixin_28724661的博客 769

FastDDS之共享内存

transport层负责为DDS用户数据收发和服务发现提供通信。包含UDP,TCP,SHM。

u010378559的博客 3084

Java Queue详解-从普通Queue到ConcurrentQueue

队列类关系总览 1. ArrayQueue 环形队列 public class ArrayQueue<T> extends AbstractList<T> { private int capacity; // 对象数组长度 private T[] queue; // 对象数组 private int head; // 头指针 private int tail; // 尾指针 } 常用方法 代码很简单,不多赘述,一看就能明白。不支持迭代

XueyinGuo的博客 955

EDA的未来:当AI与Cadence Virtuoso相遇

本文探讨了AI技术与Cadence Virtuoso在EDA领域的融合,展示了如何通过生成式AI提升芯片设计效率。文章详细分析了Virtuoso设计环境的智能化演进、AI驱动的设计辅助功能实现路径,以及SKILL语言的进化方向,为工程师提供了未来EDA工具的发展趋势和实用案例。

weixin_28312391的博客 644

Java并发编程六并发队列

并发队列并发队列的类型ConcurrentLinkedQueue Java并发编程一:并发基础必知 Java并发编程二:Java中线程 Java并发编程三:volatile使用 Java并发编程四:synchronized和lock 在多线程编程下,有时候我们需要使用现场安全的队列,其实队列大家多少肯定也知道点,比如消息中间件rabbitmq、rocketmq、kafka,都是一种生产者消费者模式...

不正经开发的博客 1459

Kubeflow系统性学习教程:从入门到高级实践

Kubeflow学习教程摘要(150字): Kubeflow是基于Kubernetes的云原生MLOps平台,提供端到端机器学习解决方案。核心功能包括Jupyter Notebooks开发环境、Pipelines工作流编排、分布式训练支持和模型服务部署。教程采用三阶段学习路径:初学者搭建Kind集群体验Notebooks;中级开发自定义Pipeline组件;高级实现企业级应用。通过容器化和K8s CRD深度集成,解决环境一致性、实验跟踪和资源调度等MLOps痛点,相比MLflow/Airflow更适合大规模

自可乐的博客 886

【智能座舱】- 智能座舱研究报告合集

智能座舱研究报告合集

零点壹客的博客 1304

Java并发编程之 并发队列

并发队列 文章目录并发队列一、无阻塞队列1. ConcurrentLinkedQueue二、阻塞队列1. ArrayBlockingQueue2. LinkedBlockingQueue3. SynchronousQueue4. PriorityBlockingQueue5. DelayQueue ConcurrentLinkedQueue 并发无阻塞队列,BlockingQueue 并发阻塞队列,二者均实现自 Queue 接口 所有的并发队列中都不允许加入null值 一、无阻塞队列 1. Concur

立志成为一个前端、后端、测试全方位发展的程序员 1054

Altium Designer应用技巧1: 功能模块的复用方法

Altium Designer应用技巧1: 功能模块的复用方法      我们在使用Altium Designer进行电路图设计时,常会遇到功能模块的复用问题,例如我们经常需要将12V以DC-DC的方式转换成5V,这在很多线路板上都会应用到。现在我们普通的做法是,每个板子都重新绘制一遍,像这样DC-DC的电路,很浪费时间。那么如何采用提高工作效率呢?我们可以采取Altium Desi

snmplink的博客 1万+

Java并发编程面试题: 并发队列&工具类

收集大量Java经典面试题目,内容涵盖了包括了:Java面试、Spring、JVM、MyBatis、Redis、MySQL、并发编程、微服务、Linux、Springboot、SpringCloud、MQ、Kafka 等知识点。适合准备Java面试的读者参考和复习。

m0_46013789的博客 958

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Java并发编程—阻塞队列

Java并发编程—阻塞队列 并发队列 ​ Java 提供的线程安全的队列(也称为并发队列)分为阻塞队列和非阻塞队列两大类。 ​ 阻塞队列的典型例子就是 BlockingQueue 接口的实现类,BlockingQueue 下面有 6 种最主要的实现,分别是 ArrayBlockingQueue(有界)、LinkedBlockingQueue(无界)、SynchronousQueue、DelayQueue、PriorityBlockingQueue 和 LinkedTransferQueue ​ 非阻塞并发

takeuherat的博客 483

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Java并发编程之阻塞队列

阻塞队列中,如果需要线程挂起操作,判断有无数据的位置采用的是while循环 ,为什么不能换成if肯定是不能换成if逻辑判断。E走判断,发现有空余位置,可以添加数据到队列,E添加数据,走enqueue。如果判断是if,A在E释放锁资源后,拿到锁资源,直接走enqueue方法。此时A线程就是在putIndex的位置,覆盖掉之前的数据,造成数据安全问题。线程A,线程B,线程E,线程C。如果队列是满的, 就一直挂起,直到被唤醒,或者被中断。生产者在添加数据时,如果队列已经满了,阻塞一会。

小小博客 575

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Java并发编程 之 同步队列与等待队列

看到队列的相互转换,翻到一篇图解很清楚的文章,推荐。

尽力而为 7987

Java并发编程:阻塞队列

Java并发编程:阻塞队列 原文链接:   http://www.cnblogs.com/dolphin0520/p/3932906.html ----------------------------------------------------------...

229

[Java并发编程-9] 阻塞队列

初步认识Java编发编程中的阻塞队列

xiaoyouyouaaa的博客 918

Java 并发编程(四)-阻塞队列

一、读写锁 1、悲观锁和乐观锁 悲观锁:先上锁,再操作,操作完解锁。不支持并发操作。 乐观锁:只是在修改完成后,提交时对数据进行上锁比较数据的完整性。 2、表锁和行锁 表锁:操作表中某一条数据会把整张表进行锁住。表锁不会发生死锁。 行锁:操作表中的某一行数据,对这行数据进行锁定。行锁会发生死锁。 3、读锁和写锁 读锁:共享锁。读锁会发生死锁。 写锁:独占锁。写锁会发生死锁。 读写锁:一个资源可以被多个读线程访问,或者可以被一个写线程访问,但是不能同时存在读写线程。读写互斥,读读共享。 例

杀神lwz的博客 961

Java并发编程——条件队列

状态依赖性:当进行下一步操作时必须先满足某个条件。例如,需要取出队列中的元素,必须依赖的状态是队列不为空;需要将元素放入缓冲区,依赖的状态是缓冲区还有空间。 在并发程序中,几条指令前队列可能还是为空,现在却为非空。在并发程序中对状态的管理我们先提供这两种办法: 轮询。不断询问是否满足条件。例如需要取出缓冲区的元素时不断询问缓冲区是否为空 while (true){ if (cond...

qq_39479426的博客 527

深入解析Java并发编程核心:QS同步器框架与CLH队列的奥秘

在现代软件开发中,并发编程已成为构建高性能系统的核心技术支柱。当多个线程同时访问共享资源时,如何保证数据一致性和系统稳定性成为开发者必须面对的挑战。Java语言从1.5版本开始引入的java.util.concurrent包,为并发编程提供了强大的工具集,而其中的AbstractQueuedSynchronizer(AQS)框架则是这些并发工具实现的核心基础。

zuiyuelong的博客 1965
上一篇: java并发编程--同步容器类&并发类容器
下一篇: windows下配置Tomcat为系统服务
别浪呀
博客等级 码龄8年 1万+粉丝 260原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值