真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

java線程4種常用鎖的特點(diǎn)是什么

這篇文章主要講解了“java線程4種常用鎖的特點(diǎn)是什么”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“java線程4種常用鎖的特點(diǎn)是什么”吧!

創(chuàng)新互聯(lián)建站2013年至今,先為平房等服務(wù)建站,平房等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為平房企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。

一. synchronized  

   1. 介紹

    synchronized關(guān)鍵字常被Java用于維護(hù)數(shù)據(jù)的一致性。通過synchronized給共享資源上鎖,只有拿到鎖才可以訪問共享資源,這樣就可以保證對(duì)訪問共享資源的順序。

    2. 使用方式

     在需要同步的方法,類或者代碼塊中加入該關(guān)鍵字即可,這樣就可以保證在同一個(gè)時(shí)刻最多只有一個(gè)線程執(zhí)行同一個(gè)對(duì)象的同步代碼,可保證修飾的代碼在執(zhí)行過程中不會(huì)被其他線程干擾。

synchronized (obj) {
 //方法
 …….
}

    3. 特點(diǎn)及使用場(chǎng)景

    synchronized修飾的代碼具有原子性可見性,在需要進(jìn)程同步的程序中使用的頻率非常高,可以滿足一般的進(jìn)程同步要求。

    4. 性能及注意事項(xiàng)

        synchronized實(shí)現(xiàn)的機(jī)理依賴于軟件層面上的JVM,因此其性能會(huì)隨著Java版本的不斷升級(jí)而提高;但需要注意的是線程通過synchronized等待鎖時(shí)是不能被Thread.interrupt()中斷的,因此程序設(shè)計(jì)時(shí)必須檢查確保合理,否則可能會(huì)造成線程死鎖的尷尬境地。

二. ReentrantLock

   1. 介紹

        ReentrantLock可重入鎖,顧名思義,這個(gè)鎖可以被線程多次重復(fù)進(jìn)入進(jìn)行獲取操作。ReentantLock繼承接口Lock并實(shí)現(xiàn)了接口中定義的方法,除了能完成synchronized所能完成的所有工作外,還提供了諸如可響應(yīng)中斷鎖、可輪詢鎖請(qǐng)求、定時(shí)鎖等避免多線程死鎖的方法。

    2. 使用方式

        ReentrantLock通過方法lock()與unlock()來進(jìn)行加鎖與解鎖操作,與synchronized會(huì)被JVM自動(dòng)解鎖機(jī)制不同,ReentrantLock加鎖后需要手動(dòng)進(jìn)行解鎖。為了避免程序出現(xiàn)異常而無法正常解鎖的情況,使用ReentrantLock必須在finally控制塊中進(jìn)行解鎖操作。通常使用方式如下所示:

Lock lock = new ReentrantLock();
try {
  lock.lock();
  //…進(jìn)行任務(wù)操作5 }
finally {
  lock.unlock();
}

   3. 特點(diǎn)及使用場(chǎng)景

         ReentantLock繼承接口Lock,而Lock實(shí)現(xiàn)的機(jī)理依賴于特殊的CPU指定,可以認(rèn)為不受JVM的約束,并可以通過其他語言平臺(tái)來完成底層的實(shí)現(xiàn) ;多在高并發(fā)量情況下使用ReentrantLock。

    4. 性能

        在并發(fā)量較小的多線程應(yīng)用程序中,ReentrantLock與synchronized性能相差無幾,但在高并發(fā)量的條件下,synchronized性能會(huì)迅速下降幾十倍,而ReentrantLock的性能卻能依然維持一個(gè)水準(zhǔn)。

三. Semaphore

    1.介紹

    Semaphore(信號(hào)量),用于做限流處理。是一種計(jì)數(shù)器,用來保護(hù)一個(gè)或者多個(gè)共享資源的訪問。如果線程要訪問一個(gè)資源就必須先獲得信號(hào)量。如果信號(hào)量?jī)?nèi)部計(jì)數(shù)器大于0,信號(hào)量減1,然后允許共享這個(gè)資源;否則,如果信號(hào)量的計(jì)數(shù)器等于0,信號(hào)量將會(huì)把線程置入休眠直至計(jì)數(shù)器大于0.當(dāng)信號(hào)量使用完時(shí),必須釋放。

    2.使用方式

    案例:同時(shí)只允許5五個(gè)人訪問,超過五個(gè)人訪問就需要等待,類似這樣的需求,下面的案例可以看出執(zhí)行是五個(gè)五個(gè)的執(zhí)行,等上一個(gè)五個(gè)執(zhí)行完了,才會(huì)執(zhí)行下一個(gè)

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Semaphore;

public class UseSemaphore {

   public static void main(String[] args) {
       // 線程池  
       ExecutorService exec = Executors.newCachedThreadPool();
       // 只能5個(gè)線程同時(shí)訪問  
       final Semaphore semp = new Semaphore(5);
       // 模擬20個(gè)客戶端訪問  
       for (int index = 0; index < 20; index++) {
           final int NO = index;
           Runnable run = new Runnable() {
               public void run() {
                   try {
                       // 獲取許可  
                       semp.acquire();
                       System.out.println("Accessing: " + NO);
                       //模擬實(shí)際業(yè)務(wù)邏輯
                       Thread.sleep((long) (Math.random() * 10000));
                       // 訪問完后,釋放  
                       semp.release();
                   } catch (InterruptedException e) {
                   }
               }
           };
           exec.execute(run);
       }

       try {
           Thread.sleep(10);
       } catch (InterruptedException e) {
           e.printStackTrace();
       }
       //System.out.println(semp.getQueueLength());
       // 退出線程池
       exec.shutdown();
   }
}

    3. 特點(diǎn)及使用場(chǎng)景

        在多線程環(huán)境下使用的一種設(shè)施, 它負(fù)責(zé)協(xié)調(diào)各個(gè)線程, 以保證它們能夠正確、合理的使用公共資源。使用場(chǎng)景如在實(shí)際復(fù)雜的多線程應(yīng)用程序中,可能存在多個(gè)臨界資源,這時(shí)候我們可以借助Semaphore信號(hào)量來完成多個(gè)臨界資源的訪問。  

   

四. AtomicInteger

    1.介紹

        AtomicInteger一種無鎖的線程安全整數(shù),一個(gè)提供原子操作的Integer的類。在Java語言中,++i和i++操作并不是線程安全的,在使用的時(shí)候,不可避免的會(huì)用到synchronized關(guān)鍵字。而AtomicInteger則通過一種線程安全的加減操作接口。(注:AtomicInteger是一系列相同類的代表之一,常見的還有AtomicLong、AtomicLong等,他們的實(shí)現(xiàn)原理相同,區(qū)別在與運(yùn)算對(duì)象類型的不同)

  2.性能

        通過相關(guān)資料顯示,通常AtomicInteger的性能是ReentantLock的好幾倍。  

感謝各位的閱讀,以上就是“java線程4種常用鎖的特點(diǎn)是什么”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對(duì)java線程4種常用鎖的特點(diǎn)是什么這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!


當(dāng)前名稱:java線程4種常用鎖的特點(diǎn)是什么
URL地址:http://weahome.cn/article/poehcs.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部