成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

java并發(fā)編程之Lock是什么-創(chuàng)新互聯(lián)

創(chuàng)新互聯(lián)www.cdcxhl.cn八線動態(tài)BGP香港云服務(wù)器提供商,新人活動買多久送多久,劃算不套路!

創(chuàng)新互聯(lián)建站致力于互聯(lián)網(wǎng)品牌建設(shè)與網(wǎng)絡(luò)營銷,包括成都網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計、SEO優(yōu)化、網(wǎng)絡(luò)推廣、整站優(yōu)化營銷策劃推廣、電子商務(wù)、移動互聯(lián)網(wǎng)營銷等。創(chuàng)新互聯(lián)建站為不同類型的客戶提供良好的互聯(lián)網(wǎng)應(yīng)用定制及解決方案,創(chuàng)新互聯(lián)建站核心團隊10年專注互聯(lián)網(wǎng)開發(fā),積累了豐富的網(wǎng)站經(jīng)驗,為廣大企業(yè)客戶提供一站式企業(yè)網(wǎng)站建設(shè)服務(wù),在網(wǎng)站建設(shè)行業(yè)內(nèi)樹立了良好口碑。

這篇文章將為大家詳細講解有關(guān)java并發(fā)編程之Lock是什么,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

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

1.為什么需要Lock

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

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

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

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

而且對多線程環(huán)境中,使用synchronized后,線程要么獲得鎖,執(zhí)行相應(yīng)的代碼,要么無法獲得鎖處于等待狀態(tài),對于鎖的處理不靈活。而Lock提供了多種基于鎖的處理機制,比如:

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

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

2.初探Lock

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

java并發(fā)編程之Lock是什么

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

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

  Lock lock = new ReentrantLock();
  lock.lock();
  try{
  //處理任務(wù)
  }catch(Exception ex){

  }finally{
  lock.unlock();  //釋放鎖
  }

網(wǎng)站名稱:java并發(fā)編程之Lock是什么-創(chuàng)新互聯(lián)
URL鏈接:http://jinyejixie.com/article2/djesic.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站制作、商城網(wǎng)站、外貿(mào)網(wǎng)站建設(shè)建站公司品牌網(wǎng)站設(shè)計、網(wǎng)站排名

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)
巢湖市| 巧家县| 吴川市| 巢湖市| 新宁县| 麦盖提县| 新余市| 大关县| 潮州市| 海丰县| 宜都市| SHOW| 清涧县| 舞钢市| 玉田县| 临泽县| 宜都市| 玉龙| 高淳县| 石嘴山市| 罗甸县| 广宗县| 连城县| 合作市| 锡林郭勒盟| 灵台县| 开江县| 高碑店市| 定边县| 昆明市| 普定县| 怀化市| 湖南省| 南丰县| 崇仁县| 中阳县| 宁夏| 江川县| 新建县| 临漳县| 绥宁县|