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

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

分析Java非阻塞算法Lock-Free的實現

瀏覽:90日期:2022-08-11 14:06:04
目錄非阻塞的棧非阻塞的鏈表非阻塞的棧

我們先使用CAS來構建幾個非阻塞的棧。棧是最簡單的鏈式結構,其本質是一個鏈表,而鏈表的根節點就是棧頂。

我們先構建Node數據結構:

public class Node<E> { public final E item; public Node<E> next; public Node(E item){this.item=item; }}

這個Node保存了內存item和它的下一個節點next。

然后我們構建非阻塞的棧,在該棧中我們需要實現pop和push方法,我們使用一個Atomic類來保存top節點的引用,在pop和push之前調用compareAndSet命令來保證命令的原子性。同時,我們需要不斷的循環,以保證在線程沖突的時候能夠重試更新。

public class ConcurrentStack<E> { AtomicReference<Node<E>> top= new AtomicReference<>(); public void push(E item){Node<E> newNode= new Node<>(item);Node<E> oldNode;do{ oldNode=top.get(); newNode.next= oldNode;}while(!top.compareAndSet(oldNode, newNode)); } public E pop(){Node<E> oldNode;Node<E> newNode;do { oldNode = top.get(); if(oldNode == null){return null; } newNode=oldNode.next;}while(!top.compareAndSet(oldNode, newNode));return oldNode.item; }}非阻塞的鏈表

構建鏈表要比構建棧復雜。因為我們要維持頭尾兩個指針。以put方法來說,我們需要執行兩步操作:1. 在尾部插入新的節點。2.將尾部指針指向最新的節點。

我們使用CAS最多只能保證其中的一步是原子執行。那么對于1和2的組合步驟該怎么處理呢?

我們再仔細考慮考慮,其實1和2并不一定要在同一個線程中執行,其他線程在檢測到有線程插入了節點,但是沒有將tail指向最后的節點時,完全幫忙完成這個操作。

我們看下具體的代碼實現:

public class LinkedNode<E> { public final E item; public final AtomicReference<LinkedNode<E>> next; public LinkedNode(E item, LinkedNode<E> next){this.item=item;this.next=new AtomicReference<>(next); }}

先構建一個LinkedNode類。

public class LinkedQueue<E> { private final LinkedNode<E> nullNode= new LinkedNode<>(null, null); private final AtomicReference<LinkedNode<E>> head= new AtomicReference<>(nullNode); private final AtomicReference<LinkedNode<E>> tail= new AtomicReference<>(nullNode); public boolean put(E item){ LinkedNode<E> newNode = new LinkedNode<>(item, null); while (true){LinkedNode<E> currentTail= tail.get();LinkedNode<E> tailNext= currentTail.next.get();if(currentTail == tail.get()){ if (tailNext != null) {//有其他的線程已經插入了一個節點,但是還沒有將tail指向最新的節點tail.compareAndSet(currentTail, tailNext); }else{//沒有其他的線程插入節點,那么做兩件事情:1. 插入新節點,2.將tail指向最新的節點if(currentTail.next.compareAndSet(null, newNode)){ tail.compareAndSet(currentTail, newNode);} }} } }}

以上就是分析Java非阻塞算法Lock-Free的實現的詳細內容,更多關于Java非阻塞算法Lock-Free的實現的資料請關注好吧啦網其它相關文章!

標簽: Java
相關文章:
主站蜘蛛池模板: 冷热冲击试验箱_温度冲击试验箱价格_冷热冲击箱排名_林频厂家 | 数码听觉统合训练系统-儿童感觉-早期言语评估与训练系统-北京鑫泰盛世科技发展有限公司 | 上海洗地机-洗地机厂家-全自动洗地机-手推式洗地机-上海滢皓洗地机 | 超声波成孔成槽质量检测仪-压浆机-桥梁预应力智能张拉设备-上海硕冠检测设备有限公司 | 带压开孔_带压堵漏_带压封堵-菏泽金升管道工程有限公司 | 科威信洗净科技,碳氢清洗机,超声波清洗机,真空碳氢清洗机 | 机器视觉检测系统-视觉检测系统-机器视觉系统-ccd检测系统-视觉控制器-视控一体机 -海克易邦 | 苏州伊诺尔拆除公司_专业酒店厂房拆除_商场学校拆除_办公楼房屋拆除_家工装拆除拆旧 | 黑龙江「京科脑康」医院-哈尔滨失眠医院_哈尔滨治疗抑郁症医院_哈尔滨精神心理医院 | 不锈钢拉手厂家|浴室门拉手厂家|江门市蓬江区金志翔五金制品有限公司 | 轴承振动测量仪电箱-轴承测振动仪器-测试仪厂家-杭州居易电气 | 优秀的临床医学知识库,临床知识库,医疗知识库,满足电子病历四级要求,免费试用 | 山东PE给水管厂家,山东双壁波纹管,山东钢带增强波纹管,山东PE穿线管,山东PE农田灌溉管,山东MPP电力保护套管-山东德诺塑业有限公司 | 新中天检测有限公司青岛分公司-山东|菏泽|济南|潍坊|泰安防雷检测验收 | 酶联免疫分析仪-多管旋涡混合仪|混合器-莱普特科学仪器(北京)有限公司 | 制氮设备-变压吸附制氮设备-制氧设备-杭州聚贤气体设备制造有限公司 | 东莞压铸厂_精密压铸_锌合金压铸_铝合金压铸_压铸件加工_东莞祥宇金属制品 | 窖井盖锯圆机_锯圆机金刚石锯片-无锡茂达金刚石有限公司 | 派财经_聚焦数字经济内容服务平台 | 污泥烘干机-低温干化机-工业污泥烘干设备厂家-焦作市真节能环保设备科技有限公司 | 丹佛斯变频器-Danfoss战略代理经销商-上海津信变频器有限公司 | 今日娱乐圈——影视剧集_八卦娱乐_明星八卦_最新娱乐八卦新闻 | 锂辉石检测仪器,水泥成分快速分析仪-湘潭宇科分析仪器有限公司 | 蓝米云-专注于高性价比香港/美国VPS云服务器及海外公益型免费虚拟主机 | 不锈钢搅拌罐_高速搅拌罐厂家-无锡市凡格德化工装备科技有限公司 | 臭氧灭菌箱-油桶加热箱-原料桶加热融化烘箱-南京腾阳干燥设备厂 臭氧发生器_臭氧消毒机 - 【同林品牌 实力厂家】 | 自动化展_机器人展_机床展_工业互联网展_广东佛山工博会 | 北京签证代办_签证办理_商务签证_旅游签证_寰球签证网 | 工业废水处理|污水处理厂|废水治理设备工程技术公司-苏州瑞美迪 今日娱乐圈——影视剧集_八卦娱乐_明星八卦_最新娱乐八卦新闻 | 亳州网络公司 - 亳州网站制作 - 亳州网站建设 - 亳州易天科技 | 全温恒温摇床-水浴气浴恒温摇床-光照恒温培养摇床-常州金坛精达仪器制造有限公司 | 厌氧反应器,IC厌氧反应器,厌氧三相分离器-山东创博环保科技有限公司 | 网站建设_网站制作_SEO优化推广_百度推广开户_朋友圈网络科技 | 微学堂-电动能源汽车评测_电动车性能分享网 | 厦门ISO认证|厦门ISO9001认证|厦门ISO14001认证|厦门ISO45001认证-艾索咨询专注ISO认证行业 | 合景一建-无尘车间设计施工_食品医药洁净车间工程装修总承包公司 | 干洗店加盟_洗衣店加盟_干洗店设备-伊蔻干洗「武汉总部」 | 不干胶标签,不干胶标签纸_厂家-山东同力胶粘制品 | 鄂泉泵业官网|(杭州、上海、全国畅销)大流量防汛排涝泵-LW立式排污泵 | 哈尔滨京科脑康神经内科医院-哈尔滨治疗头痛医院-哈尔滨治疗癫痫康复医院 | 粉碎机_塑料粉碎机_塑料破碎机厂家-星标机械|