日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

多線程 - 關于Java內存可見性的問題

瀏覽:204日期:2023-12-02 08:39:19

問題描述

請看以下代碼

public class TestVolatile {public static void main(String[] args) throws InterruptedException {ThreadDemo td = new ThreadDemo();new Thread(td).start();Thread.sleep(1);while(true){ if(td.isFlag()){System.out.println('------------------');break; }} }}class ThreadDemo implements Runnable { private boolean flag = false; @Override public void run() {try { Thread.sleep(200);} catch (InterruptedException e) {}flag = true;System.out.println('flag=' + isFlag()); } public boolean isFlag() {return flag; } public void setFlag(boolean flag) {this.flag = flag; }}

把Thread.sleep(1)換成Thread.sleep(1000)就能獲取flag修改后的值,即td.isFlag()返回true。雖然看了Java內存模型的概念,但我不知道如何解釋這段代碼,誰能解釋一下?

相關問題: Java多線程的工作內存是什么?

問題解答

回答1:

你得先說說你的預期效果是啥?問問題要問清楚啊

回答2:

這個期待是沒有規范支撐的。代碼中沒有做任何能保證 '子線程寫 happen-before 主線程讀' 的事情。

sleep(1000)后看到修改只是巧合,一個JVM如果在更久后才讓主線程看到,甚至永遠不讓主線程看到都不違反規范。

回答3:

你的程序應該是想測試 volatile 關鍵字的功能。但是 “把 Thread.sleep(1) 換成 Thread.sleep(1000) 就能獲得預期效果” 這樣做理解上是不對的。首先,程序中總共有兩個線程,主線程(暫稱 線程M)和 new Thread(td) (暫稱 線程T)。

當寫 Thread.sleep(1) 的時候,線程M 在 1ms 之后,便開始在 while(true) 循環中檢查 td.isFlag() 的值,但是因為內存可見性的關系,線程M 并不能及時讀取 線程T 中 flag 的值,所以此時導致了死循環;

當寫 Thread.sleep(1000) 的時候,M 在 1000ms 之后,開始在 while(true) 循環中檢查 td.isFlag() 的值;但是 T 在 200ms 的時候,便將 flag 的值設為 true 了,所以,M 在 1000ms 之后檢測 td.isFlag() 的值肯定是返回 true 的,那么第一次判斷便會返回 true,產生輸出并跳出 while(true) 循環。

為了讓 線程M 及時讀取到 線程T 中 flag 的值,需要將 flag 使用 volatile 關鍵字進行修飾:

private volatile boolean flag = false;

那么每次對 flag 的修改,其他線程都立馬可見。關于 volatile 的使用,可以參考我的博客:Java 多線程(6):volatile 關鍵字的使用

回答4:

可以參考如下三個代碼:其中第一個和你的情況一樣,由于多線程的可見性問題,可能導致無限循環下去。第二個是使用synchronized解決此問題,大多數工作場景用這個好第三個是使用volatile解決,但這個關鍵字只保證可見性,在實際場景中局限性比較大,得慎用

public class StopThread {private static boolean stopRequested;public static void main(String[] args) throws InterruptedException {Thread backgroundThread = new Thread(new Runnable() {@Override public void run() {@SuppressWarnings('unused')int i = 0;while(!stopRequested) {// System.out.println('加上這一句程序就可以終止,否則無限循環下去'); i++;} }});backgroundThread.start();TimeUnit.SECONDS.sleep(1);stopRequested = true; }}

public class StopThread2 {private static boolean stopRequested;public static synchronized boolean getStopRequested() {return stopRequested; }public static synchronized void requestStop() {stopRequested = true; }public static void main(String[] args) throws InterruptedException {Thread backgroundThread = new Thread(new Runnable() {@Override public void run() {@SuppressWarnings('unused')int i = 0;while(!getStopRequested()/* stopRequested */) { i++;} }});backgroundThread.start();TimeUnit.SECONDS.sleep(1);requestStop();/* stopRequested = true; */ }}

public class StopThread3 {private static volatile boolean stopRequested; public static void main(String[] args) throws InterruptedException {Thread backgroundThread = new Thread(new Runnable() {@Override public void run() {@SuppressWarnings('unused')int i = 0;while(stopRequested) { i++;} }});backgroundThread.start();TimeUnit.SECONDS.sleep(1);stopRequested = true; }}

標簽: java
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
视频在线不卡免费观看| 国产一区二区三区黄网站| 欧美偷窥清纯综合图区| 婷婷成人在线| 亚洲人成在线网站| 色婷婷亚洲mv天堂mv在影片| 精品视频国产| 成人污污视频| 国产成人精品一区二区三区在线| 欧美激情三区| 麻豆成人综合网| 欧美特黄一区| 亚洲欧美日韩综合国产aⅴ| 国产精品老牛| 中文一区在线| 亚洲综合二区| 日韩午夜黄色| 麻豆9191精品国产| 久久亚洲精品伦理| 蜜桃一区二区三区在线观看| 久久亚洲一区| 日本va欧美va精品发布| 青青草精品视频| 国产精品资源| 丰满少妇一区| 香蕉久久精品| 男女激情视频一区| 国产伦精品一区二区三区在线播放| 日韩美女精品| 91视频一区| 婷婷综合六月| 国产丝袜一区| 欧美国产美女| 日韩一区二区中文| 99视频精品| 日韩一区二区三区高清在线观看| 在线成人直播| 日本不卡中文字幕| 日韩成人精品一区| 99香蕉国产精品偷在线观看| 蜜桃久久av一区| 国产亚洲人成a在线v网站| 卡一精品卡二卡三网站乱码| 精品国产免费人成网站| 亚洲精品一二三区区别| 日本不卡的三区四区五区| 国产精品v日韩精品v欧美精品网站 | 日韩一区网站| 精品一区电影| 午夜电影亚洲| 国产探花一区二区| 久久电影tv| 中文一区一区三区免费在线观 | 97精品97| 美女日韩在线中文字幕| 日韩一区二区三免费高清在线观看 | 红桃视频国产精品| 日韩不卡免费视频| 激情国产在线| 亚州精品视频| 国产拍在线视频| 丝袜亚洲精品中文字幕一区| 国产精品**亚洲精品| 欧美亚洲激情| 国产精品亚洲一区二区在线观看| 日韩一区欧美| 日韩一区精品| 另类中文字幕国产精品| 无码日韩精品一区二区免费| 另类专区亚洲| 日本aⅴ精品一区二区三区| 日韩欧美三级| 日本午夜精品久久久| 久久激情中文| 欧美日韩在线精品一区二区三区激情综合| 国产自产自拍视频在线观看| 免费国产亚洲视频| 精品视频一区二区三区四区五区| 亚洲作爱视频| 精品国内亚洲2022精品成人| 亚洲午夜久久| 国产伦久视频在线观看| 国产欧美日韩一级| 影院欧美亚洲| 国产日韩电影| 一区二区91| 亚洲高清毛片| 亚洲一区欧美| 日本va欧美va精品发布| 亚洲一区亚洲| 亚洲精品88| 国产精品中文字幕亚洲欧美| 亚洲免费影视| 久久青草久久| 免费在线播放第一区高清av| 五月亚洲婷婷 | 性一交一乱一区二区洋洋av| 日韩专区精品| 成人午夜毛片| 国产午夜久久av| 亚洲一区二区毛片| 日韩国产在线| 国产免费久久| 日本亚州欧洲精品不卡| 欧美一区二区三区高清视频| 国产成人久久精品麻豆二区 | 国产一区二区三区自拍| 国产资源在线观看入口av| 久久中文精品| 国产精品密蕾丝视频下载| 日韩av一二三| 日韩不卡一区二区三区| 日韩一区二区三区免费视频| 一区二区三区网站| 欧美日韩黑人| 久久精品主播| 亚洲成人精品| 欧美日韩视频免费观看| 国产拍在线视频| 老牛影视精品| 色婷婷综合网| 欧美xxxx中国| 国产精品成人一区二区不卡| 捆绑调教美女网站视频一区| 欧美极品中文字幕| 欧美精品91| 国产一区二区三区天码| 高潮久久久久久久久久久久久久| 国产一区二区三区网| 久久99蜜桃| 久久精品国产在热久久| 欧美精品99| 国产一区二区三区视频在线| 国产va在线视频| 欧洲亚洲一区二区三区| 色在线视频观看| 99久久婷婷| 日韩午夜一区| 亚洲精品激情| 国产精品久久久久久久久久久久久久久 | 精品国产精品久久一区免费式| 麻豆精品视频在线观看视频| 久久久久久色| 里番精品3d一二三区| 福利精品一区| 999国产精品999久久久久久| 亚洲成人精选| 免费观看在线综合色| 欧美日本三区| 久久精品午夜| 91精品韩国| 亚洲黄色在线| 日韩福利视频导航| 久久中文在线| 国产综合视频| 亚洲免费毛片| 久久av导航| 99久久亚洲精品| 久久av一区| 欧美精品福利| 国产精品99一区二区三| 蜜桃成人av| 蜜臀久久99精品久久久久宅男| 欧美私人啪啪vps| 91亚洲一区| 亚洲制服少妇| 国产精品xvideos88| 伊人久久av| 久热re这里精品视频在线6| 国产精品欧美大片| 久久精品国产99久久| 亚洲天堂免费| 国产精品久久久久久模特| 久久久噜噜噜| 日本成人中文字幕| 四虎成人av| 免费久久99精品国产自在现线| 国产伦精品一区二区三区千人斩| 亚洲成人不卡| 免费在线观看精品| 久久久久观看| 偷拍欧美精品| 一区二区高清| 日韩国产激情| 日本在线成人| 欧美成人基地| 国产日韩亚洲欧美精品| 亚洲国内欧美| 国产精品久久乐| 99在线|亚洲一区二区| 麻豆国产精品| 蜜臀av国产精品久久久久| 国产拍在线视频| 日韩av中文字幕一区| 久久狠狠婷婷| 欧美黄色一区| 亚洲欧洲美洲国产香蕉| 日韩一区亚洲二区| 国产精选久久| 亚洲一区二区小说|