91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java Volatile關鍵字同步機制的用法

發布時間:2020-07-29 11:00:14 來源:億速云 閱讀:122 作者:小豬 欄目:編程語言

這篇文章主要講解了Java Volatile關鍵字同步機制的用法,內容清晰明了,對此有興趣的小伙伴可以學習一下,相信大家閱讀完之后會有幫助。

Volatile關鍵字--最輕量級的同步機制1.保證了不同線程對這個變量進行操作時的可見性,即一個線程修改了某個變量的值,這新值對其他線程來說是立即可見的。(實現可見性)

例如:如果一個oldvalue -->修改為newvalue ,這時的newvalue可以被其他的線程看到。

2.volatile不是線程安全的,只能保證對單次讀/寫的原子性。i++ 這種操作不能保證原子性。(不能保證原子性)最常使用場景:一寫多讀代碼演示Volatile的可見性

public class VolatileCase {
  //未加volatile關鍵字
  private static boolean ready = false;
  private static int number = 0;
  private static class ThreadInfo extends Thread{
    @Override
    public void run() {
      System.out.println("Thread start");
      while (!ready);
      System.out.println("number:"+number+"----ready:"+ready+"Thread end");
    }
  }
  public static void main(String[] args) throws InterruptedException {
    new ThreadInfo().start();
    Thread.sleep(100);
    ready = true;
    number = 123;
    Thread.sleep(100);
    System.out.println("main end");
  }
}

未加Volatile關鍵字運行結果:

Java Volatile關鍵字同步機制的用法

加上Volatile關鍵字后:

//加volatile關鍵字 private volatile static boolean ready = false;

加上Volatile關鍵字運行結果:

Java Volatile關鍵字同步機制的用法

綜上:

證實Volatile的可見性:當一個線程修改一個Volatile修飾的變量時,其他線程可以實時看到。

代碼演示Volatile的非原子性:

public class VolatileCase {
  //Volatile關鍵字
  private volatile int count = 0;

  public int getCount() {
    return count;
  }

  public void setCount(int count) {
    this.count = count;
  }

  public void inCount(){
      count++;
  }

  private static class ThreadInfo extends Thread{
    private VolatileCase vc;
    public ThreadInfo(VolatileCase vc){
      this.vc = vc;
    }
    @Override
    public void run() {
      for (int i = 0; i < 10000; i++) {
        vc.inCount();
      }
    }
  }
  public static void main(String[] args) throws InterruptedException {
    VolatileCase vc = new VolatileCase();
    ThreadInfo threadInfo1 = new ThreadInfo(vc);
    ThreadInfo threadInfo2 = new ThreadInfo(vc);
    threadInfo1.start();
    threadInfo2.start();
    Thread.sleep(100);
    System.out.println("main end:"+vc.getCount());
  }
}

第一次運行結果:

Java Volatile關鍵字同步機制的用法

第二次運行結果:

Java Volatile關鍵字同步機制的用法

正確的運行結果應該是20000的,但是每次結果都少于20000,證實Volatile的非原子性和非線程安全。

看完上述內容,是不是對Java Volatile關鍵字同步機制的用法有進一步的了解,如果還想學習更多內容,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

辽阳县| 涟源市| 中西区| 石景山区| 公主岭市| 集安市| 灯塔市| 宜兰市| 大同市| 肥东县| 房产| 秦安县| 施秉县| 周宁县| 巍山| 蓬莱市| 墨竹工卡县| 大渡口区| 浙江省| 贞丰县| 稷山县| 禹州市| 堆龙德庆县| 莲花县| 莆田市| 渑池县| 海丰县| 汨罗市| 保山市| 洛扎县| 永福县| 永康市| 南京市| 东辽县| 金昌市| 且末县| 申扎县| 江陵县| 克山县| 巴南区| 咸丰县|