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

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

實例講解Java 自旋鎖

瀏覽:25日期:2022-08-25 08:00:36

一直以來不是怎么清楚自旋鎖,最近有點時間,好好的學習了一下;

所謂的自旋鎖在我的理解就是多個線程在嘗試獲取鎖的時候,其中一個線程獲取鎖之后,其他的線程都處在一直嘗試獲取鎖的狀態,不會阻塞?。。∧敲词裁唇凶鲆恢眹L試獲取鎖呢?就是一個循環,比較經典的是AtomicInteger中的一個updateAndGet方法,下圖所示(當然也可以直接看unsafe類中的getAndAddInt等類似方法);

我們可以看出在while循環中使用CAS去嘗試更新一個變量,如果更新失敗,就會一直在這個循環中一直在嘗試;成功的話,就可以到最后的return語句;

由此我們可以大概知道如果自旋的線程過多,那么CPU的資源就會被大量消耗!??!

實例講解Java 自旋鎖

順便提一個東西叫做原子引用,官方提供了AtomicInteger,AtomicBoolean等原子類,那么如果我們自己定義的類也需要有原子性怎么辦呢?所以官方提供了一個AtomicReference類,可以將我們自己定義的類封裝一下,就成了我們自己的原子類,例如AtomicReference<Student> atomicReference = new AtomicReference<>();,然后我們對Student的實例進行CAS各種CAS操作;

栗子:

package TestMain;import lombok.extern.slf4j.Slf4j;import java.util.concurrent.TimeUnit;import java.util.concurrent.atomic.AtomicReference;@Slf4jpublic class TestMain80 { //一個Thread類的原子引用 AtomicReference<Thread> atomicReference = new AtomicReference<>(); //加鎖的方法 public void myLock() { Thread currentThread = Thread.currentThread(); log.info('myLock--Thread:{}', currentThread.getName()); //這個就是自旋鎖的核心,利用CAS比較當前原子引用中是否為null,如果是null,就把當前線程A放到里面去, // 此時線程B再到這里,那么就會CAS失敗,一直在while循環中 while (!atomicReference.compareAndSet(null, currentThread)) { } } //解鎖的方法 public void myUnlock() { Thread currentThread = Thread.currentThread(); //CAS比較原子引用中是不是線程A,是的話就更新為null,此時在上面while中一直在自旋的線程B就可以跳出來了 atomicReference.compareAndSet(currentThread, null); log.info('myUnlock--Thread:{}', currentThread.getName()); } public static void main(String[] args) { TestMain80 testMain80 = new TestMain80(); //線程A,首先加鎖,然后等3秒中,然后釋放鎖 new Thread(() -> { testMain80.myLock(); try {TimeUnit.SECONDS.sleep(3); } catch (InterruptedException e) {e.printStackTrace(); } testMain80.myUnlock(); }, 'A').start(); //主線程等1秒,保證A線程先執行 try { TimeUnit.SECONDS.sleep(1); } catch (InterruptedException e) { e.printStackTrace(); } //線程B,加鎖再釋放鎖 new Thread(() -> { testMain80.myLock(); testMain80.myUnlock(); }, 'B').start(); }}

實例講解Java 自旋鎖

上面的就是一個自旋鎖的栗子,執行結果中首先是執行A線程的myLock方法,獲取鎖成功,之后的B線程雖然也會執行mylock方法,但是會在while循環中一直阻塞,直到線程A調用了myUnlock方法釋放鎖,最后兩行才會打印出來;

以上就是實例講解Java 自旋鎖的詳細內容,更多關于Java 自旋鎖的資料請關注好吧啦網其它相關文章!

標簽: Java
相關文章:
主站蜘蛛池模板: 物流公司电话|附近物流公司电话上门取货 | 丁基胶边来料加工,医用活塞边角料加工,异戊二烯橡胶边来料加工-河北盛唐橡胶制品有限公司 | 天津市能谱科技有限公司-专业的红外光谱仪_红外测油仪_紫外测油仪_红外制样附件_傅里叶红外光谱技术生产服务厂商 | 玉米加工设备,玉米深加工机械,玉米糁加工设备.玉米脱皮制糁机 华豫万通粮机 | 废气处理_废气处理设备_工业废气处理_江苏龙泰环保设备制造有限公司 | 北京办公室装修,办公室设计,写字楼装修-北京金视觉装饰工程公司 北京成考网-北京成人高考网 | PCB设计,PCB抄板,电路板打样,PCBA加工-深圳市宏力捷电子有限公司 | 压缩空气冷冻式干燥机_吸附式干燥机_吸干机_沪盛冷干机 | 热回收盐水机组-反应釜冷水机组-高低温冷水机组-北京蓝海神骏科技有限公司 | 3D全息投影_地面互动投影_360度立体投影_水幕灯光秀 | 广东银虎 蜂窝块状沸石分子筛-吸附脱硫分子筛-萍乡市捷龙环保科技有限公司 | 石磨面粉机|石磨面粉机械|石磨面粉机组|石磨面粉成套设备-河南成立粮油机械有限公司 | Copeland/谷轮压缩机,谷轮半封闭压缩机,谷轮涡旋压缩机,型号规格,技术参数,尺寸图片,价格经销商 CTP磁天平|小电容测量仪|阴阳极极化_双液系沸点测定仪|dsj电渗实验装置-南京桑力电子设备厂 | 阴离子_阳离子聚丙烯酰胺厂家_聚合氯化铝价格_水处理絮凝剂_巩义市江源净水材料有限公司 | pH污水传感器电极,溶解氧电极传感器-上海科蓝仪表科技有限公司 | 洛阳永磁工业大吊扇研发生产-工厂通风降温解决方案提供商-中实洛阳环境科技有限公司 | 新中天检测有限公司青岛分公司-山东|菏泽|济南|潍坊|泰安防雷检测验收 | 四探针电阻率测试仪-振实密度仪-粉末流动性测定仪-宁波瑞柯微智能 | 杜康白酒加盟_杜康酒代理_杜康酒招商加盟官网_杜康酒厂加盟总代理—杜康酒神全国运营中心 | 罗茨真空机组,立式无油往复真空泵,2BV水环真空泵-力侨真空科技 | 冷却塔降噪隔音_冷却塔噪声治理_冷却塔噪音处理厂家-广东康明冷却塔降噪厂家 | 变频器维修公司_plc维修_伺服驱动器维修_工控机维修 - 夫唯科技 变位机,焊接变位机,焊接变位器,小型变位机,小型焊接变位机-济南上弘机电设备有限公司 | BESWICK球阀,BESWICK接头,BURKERT膜片阀,美国SEL继电器-东莞市广联自动化科技有限公司 | 仪器仪表网 - 永久免费的b2b电子商务平台 | 拉力测试机|材料拉伸试验机|电子拉力机价格|万能试验机厂家|苏州皖仪实验仪器有限公司 | 桨叶搅拌机_螺旋挤压/方盒旋切造粒机厂家-无锡市鸿诚输送机械有限公司 | 双相钢_双相不锈钢_双相钢圆钢棒_双相不锈钢报价「海新双相钢」 双能x射线骨密度检测仪_dxa骨密度仪_双能x线骨密度仪_品牌厂家【品源医疗】 | 双舌接地线-PC68数字式高阻计-ZC36|苏海百科 | 钢化玻璃膜|手机钢化膜|钢化膜厂家|手机保护膜-【东莞市大象电子科技有限公司】 | 高铝矾土熟料_细粉_骨料_消失模_铸造用铝矾土_铝酸钙粉—嵩峰厂家 | 清水-铝合金-建筑模板厂家-木模板价格-铝模板生产「五棵松」品牌 | 天津试验仪器-电液伺服万能材料试验机,恒温恒湿标准养护箱,水泥恒应力压力试验机-天津鑫高伟业科技有限公司 | 304不锈钢无缝管_不锈钢管厂家 - 隆达钢业集团有限公司 | 压滤机-洗沙泥浆处理-压泥机-山东创新华一环境工程有限公司 | 破碎机_上海破碎机_破碎机设备_破碎机厂家-上海山卓重工机械有限公司 | 沥青车辙成型机-车托式混凝土取芯机-混凝土塑料试模|鑫高仪器 | YAGEO国巨电容|贴片电阻|电容价格|三星代理商-深圳市巨优电子有限公司 | 橡胶接头|可曲挠橡胶接头|橡胶软接头安装使用教程-上海松夏官方网站 | 电子万能试验机_液压拉力试验机_冲击疲劳试验机_材料试验机厂家-济南众标仪器设备有限公司 | 座椅式升降机_无障碍升降平台_残疾人升降平台-南京明顺机械设备有限公司 | 帽子厂家_帽子工厂_帽子定做_义乌帽厂_帽厂_制帽厂 | 艾乐贝拉细胞研究中心 | 国家组织工程种子细胞库华南分库 |