电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

Java特性隊列和棧的堵塞原理解析

瀏覽:7日期:2022-08-22 14:22:47

做消息通信,消息會不斷從網絡流中取得,而后臺也有線程不斷消費。本來我一直是使用一些線程安全標識或方法來控制,后來在網上找到一些java新特性,里面包含了可以用到的堆棧使用,而且是堵塞的,這樣至少可以保證一些安全性。

對于堆:

BlockingQueue 不接受 null 元素。試圖 add、put 或 offer 一個 null 元素時,某些實現會拋出 NullPointerException。null 被用作指示 poll 操作失敗的警戒值。

BlockingQueue 可以是限定容量的。它在任意給定時間都可以有一個 remainingCapacity,超出此容量,便無法無阻塞地 put 附加元素。沒有任何內部容量約束的 BlockingQueue 總是報告 Integer.MAX_VALUE 的剩余容量。

BlockingQueue 實現主要用于生產者-使用者隊列,但它另外還支持 Collection接口。因此,舉例來說,使用 remove(x) 從隊列中移除任意一個元素是有可能的。然而,這種操作通常不 會有效執行,只能有計劃地偶爾使用,比如在取消排隊信息時。

BlockingQueue 實現是線程安全的。所有排隊方法都可以使用內部鎖或其他形式的并發控制來自動達到它們的目的。然而,大量的 Collection 操作(addAll、containsAll、retainAll 和 removeAll)沒有 必要自動執行,除非在實現中特別說明。因此,舉例來說,在只添加了 c 中的一些元素后,addAll(c) 有可能失敗(拋出一個異常)。

看一段代碼:

package com.test; import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.BlockingQueue; /** * @說明 堵塞隊列和棧的使用 */ public class Test { @SuppressWarnings('unchecked') public static void main(String[] args) throws InterruptedException { BlockingQueue bqueue = new ArrayBlockingQueue(5); for (int i = 0; i < 10; i++) { // 添加元素到隊列,如果沒有可用空間,將一直等待(如果有必要) bqueue.put(i); System.out.println('添加了元素:' + i); } System.out.println('----End----'); } }

運行效果:

添加了元素:0 添加了元素:1 添加了元素:2 添加了元素:3 添加了元素:4

之后就會一直等待。

對于棧:

BlockingDeque 方法有四種形式,使用不同的方式處理無法立即滿足但在將來某一時刻可能滿足的操作:第一種方式拋出異常;第二種返回一個特殊值(null 或 false,具體取決于操作);第三種無限期阻塞當前線程,直至操作成功;第四種只阻塞給定的最大時間,然后放棄。

看一個例子:

package com.test; import java.util.concurrent.BlockingDeque; import java.util.concurrent.LinkedBlockingDeque; /** * @說明 堵塞隊列和棧的使用 */ public class Test { @SuppressWarnings('unchecked') public static void main(String[] args) throws InterruptedException { BlockingDeque bDeque = new LinkedBlockingDeque(5); for (int i = 0; i < 10; i++) { // 將指定元素添加到此阻塞棧中,如果沒有可用空間,將一直等待(如果有必要)。 bDeque.putFirst(i); System.out.println('添加了元素:' + i); } System.out.println('----End----'); } }

運行結果和堆一樣,也會產生等待。

對于兩者的解釋:

阻塞隊列的概念是,一個指定長度的隊列,如果隊列滿了,添加新元素的操作會被阻塞等待,直到有空位為止。同樣,當隊列為空時候,請求隊列元素的操作同樣會阻塞等待,直到有可用元素為止。

對于阻塞棧,與阻塞隊列相似。不同點在于棧是“后入先出”的結構,每次操作的是棧頂,而隊列是“先進先出”的結構,每次操作的是隊列頭。

注意的是,BlockingQueue是5中的特性,jdk6以后才增加了BlockingDeque。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Java
相關文章:
主站蜘蛛池模板: 膏剂灌装旋盖机-眼药水灌装生产线-西林瓶粉剂分装机-南通博琅机械科技 | UV固化机_UVLED光固化机_UV干燥机生产厂家-上海冠顶公司专业生产UV固化机设备 | 锡膏喷印机-全自动涂覆机厂家-全自动点胶机-视觉点胶机-深圳市博明智控科技有限公司 | 气胀轴|气涨轴|安全夹头|安全卡盘|伺服纠偏系统厂家-天机传动 | 洛阳防爆合格证办理-洛阳防爆认证机构-洛阳申请国家防爆合格证-洛阳本安防爆认证代办-洛阳沪南抚防爆电气技术服务有限公司 | 昆山PCB加工_SMT贴片_PCB抄板_线路板焊接加工-昆山腾宸电子科技有限公司 | 美缝剂_美缝剂厂家_美缝剂加盟-地老板高端瓷砖美缝剂 | 蓝鹏测控平台 - 智慧车间系统 - 车间生产数据采集与分析系统 | 定做大型恒温循环水浴槽-工业用不锈钢恒温水箱-大容量低温恒温水槽-常州精达仪器 | 带锯机|木工带锯机圆木推台锯|跑车带锯机|河北茂业机械制造有限公司| | 郑州律师咨询-郑州律师事务所_河南锦盾律师事务所 | 冷镦机-多工位冷镦机-高速冷镦机厂家-温州金诺机械设备制造有限公司 | 纸张环压仪-纸张平滑度仪-杭州纸邦自动化技术有限公司 | POM塑料_PBT材料「进口」聚甲醛POM杜邦原料、加纤PBT塑料报价格找利隆塑料 | 综合管廊模具_生态,阶梯护坡模具_检查井模具制造-致宏模具厂家 | 深圳彩钢板_彩钢瓦_岩棉板_夹芯板_防火复合彩钢板_长鑫 | RS系列电阻器,RK_RJ启动调整电阻器,RQ_RZ电阻器-上海永上电器有限公司 | 郑州爱婴幼师学校_专业幼师培训_托育师培训_幼儿教育培训学校 | 大立教育官网-一级建造师培训-二级建造师培训-造价工程师-安全工程师-监理工程师考试培训 | 智能垃圾箱|垃圾房|垃圾分类亭|垃圾分类箱专业生产厂家定做-宿迁市传宇环保设备有限公司 | 精密机械零件加工_CNC加工_精密加工_数控车床加工_精密机械加工_机械零部件加工厂 | 山东彩钢板房,山东彩钢活动房,临沂彩钢房-临沂市贵通钢结构工程有限公司 | 广州展览设计公司_展台设计搭建_展位设计装修公司-众派展览装饰 广州展览制作工厂—[优简]直营展台制作工厂_展会搭建资质齐全 | 户外环保不锈钢垃圾桶_标识标牌制作_园林公园椅厂家_花箱定制-北京汇众环艺 | 艺术涂料|木纹漆施工|稻草漆厂家|马来漆|石桦奴|水泥漆|选加河南天工涂料 | 智能汉显全自动量热仪_微机全自动胶质层指数测定仪-鹤壁市科达仪器仪表有限公司 | 软启动器-上海能曼电气有限公司 真空搅拌机-行星搅拌机-双行星动力混合机-广州市番禺区源创化工设备厂 | bkzzy在职研究生网 - 在职研究生招生信息咨询平台 | 无菌水质袋-NASCO食品无菌袋-Whirl-Pak无菌采样袋-深圳市慧普德贸易有限公司 | 武汉高温老化房,恒温恒湿试验箱,冷热冲击试验箱-武汉安德信检测设备有限公司 | 水压力传感器_数字压力传感器|佛山一众传感仪器有限公司|首页 | 高低温试验房-深圳高低温湿热箱-小型高低温冲击试验箱-爱佩试验设备 | 电脑知识|软件|系统|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网 | 深圳市索富通实业有限公司-可燃气体报警器 | 可燃气体探测器 | 气体检测仪 | 天津次氯酸钠酸钙溶液-天津氢氧化钠厂家-天津市辅仁化工有限公司 | 一体化污水处理设备_生活污水处理设备_全自动加药装置厂家-明基环保 | CTAB,表面活性剂1631溴型(十六烷基三甲基溴化铵)-上海升纬化工原料有限公司 | 灰板纸、灰底白、硬纸板等纸品生产商-金泊纸业 | 化妆品加工厂-化妆品加工-化妆品代加工-面膜加工-广东欧泉生化科技有限公司 | 自动钻孔机-全自动数控钻孔机生产厂家-多米(广东)智能装备有限公司 | 不干胶标签-不干胶贴纸-不干胶标签定制-不干胶标签印刷厂-弗雷曼纸业(苏州)有限公司 |