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

Java并發(fā)之不可思議的死循環(huán)詳解

 更新時間:2017年01月17日 10:58:12   投稿:jingxian  
下面小編就為大家?guī)硪黄狫ava并發(fā)之不可思議的死循環(huán)詳解。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

下面的代碼將發(fā)生死循環(huán):

package com.zzj.concurrency;

public class VolatileObjectTest implements Runnable{
 private ObjectA objectA; // 加上volatile 就可以正常結(jié)束While循環(huán)了
  public VolatileObjectTest(ObjectA a) { 
    this.objectA = a; 
  } 
  
  public ObjectA getA() { 
    return objectA; 
  } 
  
  public void setA(ObjectA a) { 
    this.objectA = a; 
  } 
  
  @Override 
  public void run() { 
    long i = 0; 
    while (objectA.isFlag()) { 
      i++; 
    } 
    System.out.println("stop My Thread " + i); 
  } 
  
  public void stop() { 
    objectA.setFlag(false); 
  } 
  
  public static void main(String[] args) throws InterruptedException { 
     // 如果啟動的時候加上-server 參數(shù)則會 輸出 Java HotSpot(TM) Server VM 
    System.out.println(System.getProperty("java.vm.name")); 
      
    VolatileObjectTest test = new VolatileObjectTest(new ObjectA()); 
    new Thread(test).start(); 
  
    Thread.sleep(1000); 
    test.stop(); 
    System.out.println("Main Thread " + test.getA().isFlag()); 
  } 
  
  static class ObjectA { 
    private boolean flag = true; 
  
    public boolean isFlag() { 
      return flag; 
    } 
  
    public void setFlag(boolean flag) { 
      this.flag = flag; 
    } 
  
  } 
}

死循環(huán)發(fā)生在代碼段:

while (objectA.isFlag()) { 
    i++;
}

這是由于編譯器對其進行了優(yōu)化,因為while循環(huán)內(nèi)部沒有修改objectA變量且沒有用volatile修飾,JVM會把判斷提前,類似于優(yōu)化成如下:

if(objectA.isFlag()){
  while(true){
    i++;
  }
}

以上這篇Java并發(fā)之不可思議的死循環(huán)詳解就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

最新評論

横山县| 耒阳市| 霍山县| 自贡市| 谢通门县| 尉犁县| 洛川县| 都江堰市| 安岳县| 雅安市| 淄博市| 兴城市| 安塞县| 磐石市| 进贤县| 昌黎县| 克拉玛依市| 新龙县| 广德县| 乃东县| 阿鲁科尔沁旗| 桐乡市| 厦门市| 浦江县| 太和县| 二连浩特市| 富阳市| 宣武区| 来安县| 迁西县| 海安县| 武穴市| 余庆县| 凉城县| 上虞市| 鱼台县| 西吉县| 洪雅县| 综艺| 泰兴市| 巩义市|