JUC(九)

本文深入探讨了Java并发组件LinkedBlockingQueue的工作原理,包括其内部的链表结构、入队出队操作、加锁策略以及在并发环境中的线程安全分析。重点讲解了如何通过两把锁实现高效并发,并强调了无界队列可能导致的内存问题。
摘要由CSDN通过智能技术生成

1.链表阻塞队列–LinkedBlockingQueue原理

1.1.概述

1>.LinkedBlockingQueue是基于链表的阻塞队列,其内部维护了一个数据缓冲队列(该队列由一个链表构成),当生产者往队列中放入一个数据时,队列会从生产者手中获取数据,并缓冲在队列内部,而生产者立即返回.只有当队列缓冲区达到最大缓存容量时(LinkedBlockingQueue可以通过构造函数指定该值),会阻塞生产者线程,直到消费者从队列中消费掉一个数据,生产者线程才会被唤醒.反之,对于消费者这端的处理也基于同样的原理;

2>.LinkedBlockingQueue之所以能够高效的处理并发数据,是因为其对生产者端和消费者端分别采用了独立的锁来控制数据同步,这也意味着在高并发的情况下生产者和消费者可以并行的操作队列中的数据,以此来提高整个队列的并发性能;

3>.作为开发者,我们需要注意的是,如果构造一个LinkedBlockingQueue对象,而没有指定其容量大小,那么LinkedBlockingQueue会默认初始化一个类似无限大小的容量(默认为Integer.MAX_VALUE),这样的话,如果生产者速度一旦大于消费者的速度,也许还没有等到队列满阻塞产生,系统内存就有可能已被消耗殆尽了;

4>.特性:

①.LinkedBlockingQueue支持有界;
②.LinkedBlock

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值