最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

深入分析JAVA Synchronized關鍵字

 更新時間:2020年06月19日 11:41:00   作者:WK_BlogYard  
這篇文章主要介紹了析JAVA Synchronized關鍵字的相關知識,文中代碼非常詳細,幫助大家更好的理解和學習,感興趣的朋友可以了解下

并發(fā)一致性的概念?

  是利用鎖的機制來實現(xiàn)同步的,鎖機制有如下兩種特性:

    互斥性:即在同一時間只允許一個線程持有某個對象鎖,通過這種特性來實現(xiàn)多線程中的協(xié)調機制,這樣在同一時間只有一個線程對需同步的代碼塊(復合操作)進行訪問?;コ庑晕覀円餐Q為操作的原子性。

    可見性:必須確保在鎖被釋放之前,對共享變量所做的修改,對于隨后獲得該鎖的另一個線程是可見的(即在獲得鎖時應獲得最新共享變量的值),否則另一個線程可能是在本地緩存的某個副本上繼續(xù)操作從而引起不一致。

Synchronized的用法?

  1.同步方法

    同步非靜態(tài)方法

/**
 * Synchronized關鍵字的用法
 * @author Administrator
 *
 */
public class SynchronizeDemo01 {

  /**
   * 修飾非靜態(tài)方法
   * @Description: TODO
   * @returnType: void
   */
  public synchronized void accessResources1(){
    try {
      TimeUnit.SECONDS.sleep(2);
      System.out.println(Thread.currentThread().getName()+" is running!");
    } catch (InterruptedException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
  }

  public static void main(String[] args) {

    //非靜態(tài)方法的測試
    SynchronizeDemo01 demo01 = new SynchronizeDemo01();
    for (int i = 0; i < 5; i++) {
      new Thread(demo01::accessResources1).start();
    }

  }

}

     同步靜態(tài)方法

/**
 * Synchronized關鍵字的用法
 * @author Administrator
 *
 */
public class SynchronizeDemo01 {
  /**
   * 修飾靜態(tài)方法
   * @Description: TODO
   * @returnType: void
   */
  public synchronized static void accessResources0(){
    try {
      TimeUnit.SECONDS.sleep(2);
      System.out.println(Thread.currentThread().getName()+" is running!");
    } catch (InterruptedException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
  }

  public static void main(String[] args) {
    //靜態(tài)方法的測試
    for(int i=0;i<5;i++){
      new Thread(SynchronizeDemo01::accessResources0).start();
    }

  }

}

  2.同步代碼塊

    代碼塊對象,獲取對象鎖,在 Java 中,每個對象都會有一個 monitor 對象,這個對象其實就是 Java 對象的鎖,通常會被稱為“內置鎖”或“對象鎖”。類的對象可以有多個,所以每個對象有其獨立的對象鎖,互不干擾。

/**
 * Synchronized關鍵字的用法
 * @author Administrator
 *
 */
public class SynchronizeDemo01 {

  /**
   * synchronized代碼塊(對象),this指的是當前對象
   * @Description: TODO
   * @returnType: void
   */
  public void accessResources2(){
    synchronized(this){
      try {
        TimeUnit.SECONDS.sleep(2);
        System.out.println(Thread.currentThread().getName()+" is running!");
      } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
      }
    }
  }


  public static void main(String[] args) {
    //非靜態(tài)方法的測試
    SynchronizeDemo01 demo01 = new SynchronizeDemo01();
    for (int i = 0; i < 5; i++) {
      new Thread(demo01::accessResources2).start();
    }

  }

}

    代碼塊 (類.class),獲取類鎖,在 Java 中,針對每個類也有一個鎖,可以稱為“類鎖”,類鎖實際上是通過對象鎖實現(xiàn)的,即類的 Class 對象鎖。每個類只有一個 Class 對象,所以每個類只有一個類鎖。

/**
 * Synchronized關鍵字的用法
 * @author Administrator
 *
 */
public class SynchronizeDemo01 {

  /**
   * synchronized代碼塊(類.class)
   * @Description: TODO
   * @returnType: void
   */
  public void accessResources3(){
    synchronized(SynchronizeDemo01.class){
      //有Class對象的所有的對象都共同使用這一個鎖
      try {
        TimeUnit.SECONDS.sleep(2);
        System.out.println(Thread.currentThread().getName()+" is running!");
      } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
      }
    }
  }
  public static void main(String[] args) {
    //非靜態(tài)方法的測試
    SynchronizeDemo01 demo01 = new SynchronizeDemo01();
    for (int i = 0; i < 5; i++) {
      new Thread(demo01::accessResources3).start();
    }

  }

}

Java對象的monitor對象的作用?

  1.當某一線程想要占有這個對象的時候,首先判斷monitor 的計數(shù)器是不是0,如果是0表示還沒有線程占有,這個時候線程可以占有這個對象,并且對這個對象的monitor+1;如果不為0,表示這個線程已經被其他線程占有,那么這個線程需要等待。當線程釋放占有權的時候,monitor-1。

  2. 同一線程可以對同一對象進行多次加鎖,+1,+1,重入性

Synchronized代碼塊的加鎖機制?

  1.對代碼塊的加鎖,通過反編譯文件,發(fā)現(xiàn)在Monitorenter和Monitorexit中間是加鎖的部分

  2.對方法的加鎖,通過反編譯文件,發(fā)現(xiàn)標有ACC_SYNCHRONIZED標識的為加鎖方法

 Java虛擬機中幾種鎖的對比?

  無狀態(tài)鎖:沒有加鎖

  偏向鎖:在對象第一次被某一線程占有的時候,會將“是否偏向鎖”字段置為1,“鎖標志位”記為01,寫入線程號,當其他的線 程訪問的時候,就會發(fā)生 競爭,如果競爭失敗則升級為輕量級鎖。偏向鎖更加偏向第一次訪問的線程獲取鎖成功。

     輕量級鎖:線程有交替適用,互斥性不是很強,當偏向鎖通過CAS算法獲取鎖失敗,把鎖標志位置為00。

  重量級鎖:強互斥,鎖標志位為10,等待時間長

以上就是深入分析JAVA Synchronized關鍵字的詳細內容,更多關于JAVA Synchronized關鍵字的資料請關注腳本之家其它相關文章!

相關文章

  • java swing實現(xiàn)簡單計算器界面

    java swing實現(xiàn)簡單計算器界面

    這篇文章主要為大家詳細介紹了java swing實現(xiàn)簡單計算器界面,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • Java線程隊列LinkedBlockingQueue的使用

    Java線程隊列LinkedBlockingQueue的使用

    本文主要介紹了Java線程隊列LinkedBlockingQueue的使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-06-06
  • JDK8環(huán)境中使用struts2的步驟詳解

    JDK8環(huán)境中使用struts2的步驟詳解

    這篇文章主要給大家介紹了關于在JDK8環(huán)境中使用struts2的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2018-11-11
  • Java中常見的陷阱題及答案

    Java中常見的陷阱題及答案

    在電腦里找到一份當時學習JAVA時的筆記,看到一些現(xiàn)在已經遺忘的細節(jié)。稍微整理了幾個,發(fā)出來與大家分享。這篇文章主要介紹了Java中常見的陷阱題及答案,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-01-01
  • java中實現(xiàn)map與對象相互轉換的幾種實現(xiàn)

    java中實現(xiàn)map與對象相互轉換的幾種實現(xiàn)

    這篇文章主要介紹了java中實現(xiàn)map與對象相互轉換的幾種實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-07-07
  • 2020年IntelliJ IDEA最新最詳細配置圖文教程詳解

    2020年IntelliJ IDEA最新最詳細配置圖文教程詳解

    這篇文章主要介紹了2020年IntelliJ IDEA最新最詳細配置圖文教程詳解,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-02-02
  • 使用Java實現(xiàn)PDF文字識別的方法詳解

    使用Java實現(xiàn)PDF文字識別的方法詳解

    在現(xiàn)代信息化的社會中,PDF文件已經成為一種非常常見的文檔格式,本文將詳細介紹如何使用Java實現(xiàn)PDF文字識別,包括所需的工具、庫、代碼實現(xiàn)以及實際應用中的注意事項,需要的朋友可以參考下
    2025-02-02
  • Java面向對象基礎教學(三)

    Java面向對象基礎教學(三)

    這篇文章主要介紹了Java的面相對象編程思想,包括類對象方法和封裝繼承多態(tài)等各個方面的OOP基本要素,非常推薦,需要的朋友可以參考下,希望可以對你有所幫助
    2021-07-07
  • 圖文詳解Java線程和線程池

    圖文詳解Java線程和線程池

    下面小編就為大家?guī)硪黄斦凧ava的線程和線程池。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2021-11-11
  • springmvc之獲取參數(shù)的方法(必看)

    springmvc之獲取參數(shù)的方法(必看)

    下面小編就為大家?guī)硪黄猻pringmvc之獲取參數(shù)的方法(必看)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08

最新評論

佳木斯市| 白河县| 会宁县| 上蔡县| 射洪县| 鹰潭市| 双流县| 太康县| 南江县| 天门市| 新田县| 察隅县| 昭平县| 揭阳市| 泸溪县| 社旗县| 治多县| 上蔡县| 宝兴县| 芷江| 会宁县| 莱芜市| 卢湾区| 南乐县| 武安市| 临江市| 辽中县| 湘西| 杭锦后旗| 石台县| 焦作市| 永州市| 济宁市| 桐乡市| 交口县| 都安| 咸阳市| 汉川市| 凤城市| 铜陵市| 白山市|