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

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

java并發編程專題(四)----淺談(JUC)Lock鎖

瀏覽:26日期:2022-08-30 08:55:48

首先我們來回憶一下上一節講過的synchronized關鍵字,該關鍵字用于給代碼段或方法加鎖,使得某一時刻它修飾的方法或代碼段只能被一個線程訪問。那么試想,當我們遇到這樣的情況:當synchronized修飾的方法或代碼段因為某種原因(IO異常或是sleep方法)被阻塞了,但是鎖有沒有被釋放,那么其他線程除了等待以外什么事都做不了。當我們遇到這種情況該怎么辦呢?我們今天講到的Lock鎖將有機會為此行使他的職責。

1.為什么需要Lock

synchronized 是Java 語言層面的,是內置的關鍵字;Lock 則是JDK 5 的J.U.C(java/util/currrent)包中出現的一個類,在使用時,synchronized 同步的代碼塊可以由JVM自動釋放;Lock 需要程序員在finally塊中手工釋放;synchronized是比較古老的實現機制,設計較早,有一些功能上的限制:

——它無法中斷一個正在等候獲得鎖的線程

——也無法通過投票得到鎖,如果不想等下去,也就沒法得到鎖。

——同步還要求鎖的釋放只能在與獲得鎖所在的堆棧幀相同的堆棧幀中進行

而且對多線程環境中,使用synchronized后,線程要么獲得鎖,執行相應的代碼,要么無法獲得鎖處于等待狀態,對于鎖的處理不靈活。而Lock提供了多種基于鎖的處理機制,比如:

void lock(),獲取一個鎖,如果鎖當前被其他線程獲得,當前的線程將被休眠。 boolean tryLock(),嘗試獲取一個鎖,如果當前鎖被其他線程持有,則返回false,不會使當前線程休眠。 boolean tryLock(long timeout,TimeUnit unit),如果獲取了鎖定立即返回true,如果別的線程正持有鎖,會等待參數給定的時間,在等待的過程中,如果獲取了鎖定,就返回true,如果等待超時,返回false。 void lockInterruptibly(),如果獲取了鎖定立即返回,如果沒有獲取鎖定,當前線程處于休眠狀態,直到或者鎖定,或者當前線程被別的線程中斷。

可見lock比synchronized提供了更細的粒度、更靈活的控制。

2.初探Lock

在jdk1.5之后,并發包中新增了Lock接口(以及相關實現類)用來實現鎖功能,其實真正的實現Lock接口的類就三個,ReentrantLock和ReentrantReadWriteLock的兩個內部類(ReadLock和WriteLock實現了Lock的接口),下面我們來看一下Lock的類圖:

java并發編程專題(四)----淺談(JUC)Lock鎖

ReentrantLock:一個可重入的互斥鎖,為lock接口的主要實現。 ReentrantReadWriteLock: ReadWriteLock、ReadWriteLock 維護了一對相關的鎖,一個用于只讀操作,另一個用于寫入操作。 Semaphore:一個計數信號量。 Condition:鎖的關聯條件,目的是允許線程獲取鎖并且查看等待的某一個條件是否滿足。 CyclicBarrier:一個同步輔助類,它允許一組線程互相等待,直到到達某個公共屏障點。

①首先我們來看一下Lock的用法:

Lock lock = new ReentrantLock(); lock.lock(); try{ //處理任務 }catch(Exception ex){ }finally{ lock.unlock(); //釋放鎖 }

正常使用Lock的用法最多就是這樣,ReentrantLock是Lock的實現類們也是最常使用的。如果采用Lock,必須主動去釋放鎖,并且在發生異常時,不會自動釋放鎖。因此一般來說,使用Lock必須在try{}catch{}塊中進行,并在finally塊釋放鎖,以保證鎖一定被被釋放,防止死鎖的發生。

②我們也可以這樣使用Lock:

Lock lock = new ReentrantLock(); if(lock.tryLock()) { try{ //處理任務 }catch(Exception ex){ }finally{ lock.unlock(); //釋放鎖 } }else { //如果不能獲取鎖,則直接做其他事情 }

tryLock()方法是有返回值的,它表示用來嘗試獲取鎖,如果獲取成功,則返回true,如果獲取失敗(即鎖已被其他線程獲取)則返回false,也就說這個方法無論如何都會立即返回。在拿不到鎖時不會一直在那等待。

這一節我們簡單了解一下Lock接口,由于Lock鎖的內容實在是太多,包括互斥鎖,公平鎖,非公平鎖,共享鎖以及相關的條件機制,信號量機制等等,我會一點點的把他們都啃下來,下面才是我們的重頭戲。

以上就是java并發編程專題(四)----淺談(JUC)Lock鎖的詳細內容,更多關于JAVA (JUC)LOCK鎖的資料請關注好吧啦網其它相關文章!

標簽: Java
相關文章:
主站蜘蛛池模板: 国际金融网_每日财经新资讯网| 欧版反击式破碎机-欧版反击破-矿山石料破碎生产线-青州奥凯诺机械 | 立式矫直机_卧式矫直机-无锡金矫机械制造有限公司 | 阜阳成人高考_阜阳成考报名时间_安徽省成人高考网| 防水套管-柔性防水套管-刚性防水套管-上海执品管件有限公司 | 超声波焊接机_超音波熔接机_超声波塑焊机十大品牌_塑料超声波焊接设备厂家 | 锌合金压铸-铝合金压铸厂-压铸模具-冷挤压-誉格精密压铸 | hc22_hc22价格_hc22哈氏合金—东锜特殊钢 | 厂房出租_厂房出售_产业园区招商_工业地产 - 中工招商网 | 中国在职研究生招生信息网| 东莞韩创-专业绝缘骨架|马达塑胶零件|塑胶电机配件|塑封电机骨架厂家 | 黑龙江「京科脑康」医院-哈尔滨失眠医院_哈尔滨治疗抑郁症医院_哈尔滨精神心理医院 | 塑胶跑道施工-硅pu篮球场施工-塑胶网球场建造-丙烯酸球场材料厂家-奥茵 | 耐高温风管_耐高温软管_食品级软管_吸尘管_钢丝软管_卫生级软管_塑料波纹管-东莞市鑫翔宇软管有限公司 | 板框压滤机-隔膜压滤机-厢式压滤机生产厂家-禹州市君工机械设备有限公司 | 气密性检测仪_气密性检测设备_防水测试仪_密封测试仪-岳信仪器 | 液压中心架,数控中心架,自定心中心架-烟台恒阳机电设计有限公司 行星搅拌机,双行星搅拌机,动力混合机,无锡米克斯行星搅拌机生产厂家 | 铝合金脚手架厂家-专注高空作业平台-深圳腾达安全科技 | 阻垢剂,反渗透阻垢剂,缓蚀阻垢剂-山东普尼奥水处理科技有限公司 真空粉体取样阀,电动楔式闸阀,电动针型阀-耐苛尔(上海)自动化仪表有限公司 | 闭端端子|弹簧螺式接线头|防水接线头|插线式接线头|端子台|电源线扣+护线套|印刷电路板型端子台|金笔电子代理商-上海拓胜电气有限公司 | 垃圾压缩设备_垃圾处理设备_智能移动式垃圾压缩设备--山东明莱环保设备有限公司 | 海鲜池-专注海鲜鱼缸、移动海鲜缸、饭店鱼缸设计定做-日晟水族厂家 | 精雕机-火花机-精雕机 cnc-高速精雕机-电火花机-广东鼎拓机械科技有限公司 | 空调风机,低噪声离心式通风机,不锈钢防爆风机,前倾皮带传动风机,后倾空调风机-山东捷风风机有限公司 | 沈阳缠绕包装机厂家直销-沈阳海鹞托盘缠绕包装机价格 | 智能终端_RTU_dcm_北斗星空自动化科技| 精密光学实验平台-红外粉末压片机模具-天津博君 | RO反渗透设备_厂家_价格_河南郑州江宇环保科技有限公司 | 高压直流电源_特种变压器_变压器铁芯-希恩变压器定制厂家 | 小区健身器材_户外健身器材_室外健身器材_公园健身路径-沧州浩然体育器材有限公司 | 一体化污水处理设备_生活污水处理设备_全自动加药装置厂家-明基环保 | 回转炉,外热式回转窑,回转窑炉-淄博圣元窑炉工程有限公司 | 昆明网络公司|云南网络公司|昆明网站建设公司|昆明网页设计|云南网站制作|新媒体运营公司|APP开发|小程序研发|尽在昆明奥远科技有限公司 | 迪威娱乐|迪威娱乐客服|18183620002| 杰恒蠕动泵-蠕动泵专业厂家-19年专注蠕动泵 | 工业胀紧套_万向节联轴器_链条-规格齐全-型号选购-非标订做-厂家批发价格-上海乙谛精密机械有限公司 | 范秘书_懂你的范文小秘书 | 优宝-汽车润滑脂-轴承润滑脂-高温齿轮润滑油脂厂家 | 烟雾净化器-滤筒除尘器-防爆除尘器-除尘器厂家-东莞执信环保科技有限公司 | 压缩空气冷冻式干燥机_吸附式干燥机_吸干机_沪盛冷干机 | 福建珂朗雅装饰材料有限公司「官方网站」 |