1. <ul id="0c1fb"></ul>

      <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
      <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区

      RELATEED CONSULTING
      相關(guān)咨詢
      選擇下列產(chǎn)品馬上在線溝通
      服務(wù)時間:8:30-17:00
      你可能遇到了下面的問題
      關(guān)閉右側(cè)工具欄

      新聞中心

      這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
      java線程4種常用鎖的特點是什么

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

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

      一. synchronized  

         1. 介紹

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

          2. 使用方式

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

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

          3. 特點及使用場景

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

          4. 性能及注意事項

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

      二. ReentrantLock

         1. 介紹

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

          2. 使用方式

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

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

         3. 特點及使用場景

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

          4. 性能

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

      三. Semaphore

          1.介紹

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

          2.使用方式

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

      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個線程同時訪問  
             final Semaphore semp = new Semaphore(5);
             // 模擬20個客戶端訪問  
             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);
                             //模擬實際業(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. 特點及使用場景

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

         

      四. AtomicInteger

          1.介紹

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

        2.性能

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

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


      新聞名稱:java線程4種常用鎖的特點是什么
      本文路徑:http://www.ef60e0e.cn/article/poehcs.html
      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区
      1. <ul id="0c1fb"></ul>

        <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
        <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

        锡林郭勒盟| 泾源县| 陈巴尔虎旗| 防城港市| 齐齐哈尔市| 靖西县| 南投县| 怀安县| 新野县| 旬邑县| 林州市| 工布江达县| 杭州市| 松阳县| 霍邱县| 壤塘县| 兴城市| 鹿邑县| 石棉县| 永城市| 南皮县| 达尔| 深泽县| 寻甸| 大丰市| 遂宁市| 论坛| 福贡县| 吴旗县| 平利县| 龙岩市| 汕头市| 庆阳市| 曲水县| 增城市| 黄大仙区| 德阳市| 武川县| 海门市| 康平县| 中山市|