国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > Java > 正文

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

2019-11-26 13:14:42
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

下面的代碼將發(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 {      // 如果啟動(dòng)的時(shí)候加上-server 參數(shù)則會(huì) 輸出 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++;}

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

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

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

發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 登封市| 墨玉县| 图片| 新建县| 噶尔县| 昂仁县| 涿鹿县| 蒙山县| 新宾| 射洪县| 克山县| 武胜县| 西吉县| 定陶县| 太白县| 平安县| 嵩明县| 资中县| 通河县| 鹤庆县| 湘潭县| 富阳市| 白沙| 舞阳县| 长宁区| 铜川市| 新邵县| 磐安县| 封丘县| 乐山市| 千阳县| 定边县| 岑溪市| 东台市| 大安市| 积石山| 兴安县| 武安市| 开封县| 安庆市| 沛县|