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

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

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

瀏覽:207日期: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久久,三上悠亚国产精品一区二区三区
久久国产免费| 清纯唯美亚洲综合一区| 鲁大师成人一区二区三区| 麻豆国产欧美一区二区三区| 亚洲激情偷拍| 国产精品欧美一区二区三区不卡| 欧美成人精品三级网站| 久久性天堂网| av资源中文在线| 国产区精品区| 亚洲精品一二| 日韩精品水蜜桃| 麻豆精品一区二区综合av| 日韩高清电影免费| 欧美国产91| 蜜臀国产一区| 成人av三级| 午夜久久中文| 米奇777超碰欧美日韩亚洲| 在线看片国产福利你懂的| 欧美国产日本| 麻豆国产欧美一区二区三区| 青青国产91久久久久久| 欧美精品影院| 美女毛片一区二区三区四区最新中文字幕亚洲 | 日韩精品亚洲一区二区三区免费| 国产精品婷婷| 日韩精品视频网| 国产精品1区| 国产欧美激情| 国产中文欧美日韩在线| 91精品国产调教在线观看| 午夜久久福利| 国产欧美一区二区精品久久久| 国产欧美午夜| 久久91视频| 91久久黄色| 国产探花一区在线观看| av资源中文在线| 久久精品99久久无色码中文字幕| 日韩午夜一区| 国产精品夜夜夜| 久久国产免费| 日韩不卡一二三区| 国产精品麻豆久久| 亚洲一区成人| 久久婷婷国产| 中文字幕视频精品一区二区三区| 国产劲爆久久| 亚洲一区国产| 激情国产在线| 91久久精品无嫩草影院| 成人看片网站| 国产欧美久久一区二区三区| 久久国际精品| 日韩三区在线| 国产乱人伦丫前精品视频 | 精品理论电影在线| 久久成人av| 久久爱www.| 岛国av免费在线观看| 亚洲精品小说| 欧美午夜不卡| 肉色欧美久久久久久久免费看| 日本视频中文字幕一区二区三区| 久久精品av| 国产一区二区三区四区五区 | 久久精品人人| 国产精品午夜一区二区三区| 每日更新成人在线视频| 91看片一区| 国产一区二区三区不卡视频网站 | 丰满少妇一区| 国产精品v日韩精品v欧美精品网站| 视频一区中文| 激情综合自拍| 久久高清精品| 久久国产欧美| 久久免费黄色| 999久久久国产精品| 日韩国产一区| 999精品色在线播放| 久久影视三级福利片| 国产日韩欧美一区二区三区在线观看 | 精品在线播放| 欧美午夜精品一区二区三区电影| 国产成人a视频高清在线观看| 精品一区二区三区视频在线播放| 国产欧美丝祙| 麻豆一区在线| 国产在线视频欧美一区| 91欧美在线| 久久久亚洲一区| 久久字幕精品一区| 国产精品午夜一区二区三区| 91伊人久久| 国产一区一一区高清不卡| 久久久亚洲欧洲日产| av在线资源| 亚洲乱码一区| 综合欧美精品| 亚洲精品成人一区| 成人日韩精品| 国产美女精品视频免费播放软件| 日本视频一区二区| 国产一区一一区高清不卡| 久久亚洲国产| 亚洲精品中文字幕99999| 亚洲久久视频| 午夜久久久久| 亚洲一区二区三区无吗| 国产一精品一av一免费爽爽| 国产精品伦理久久久久久| 欧美成人国产| 国产精品第一国产精品| 久久精品国产亚洲夜色av网站| 亚洲一区二区免费在线观看| 狂野欧美性猛交xxxx| 中文字幕日韩高清在线| 久久久久99| 国产精品扒开腿做爽爽爽软件| 激情婷婷综合| 精品国产免费人成网站| 亚洲一二av| 成人av二区| 国产毛片精品| 亚洲一区二区三区中文字幕在线观看| 国产精品久久久久av电视剧| 国产伦精品一区二区三区在线播放| 99re国产精品| 欧美日韩亚洲在线观看| 精品国产中文字幕第一页| 日本成人一区二区| 亚洲精品免费观看| 一区久久精品| 中文字幕一区久| 国产精品国产一区| 里番精品3d一二三区| 国产日韩1区| 欧美日韩一区二区三区四区在线观看| 亚洲国内欧美| 免费久久久久久久久| 日韩在线视频精品| 波多野结衣久久精品| 你懂的网址国产 欧美| 欧美激情综合| 欧美国产小视频| 国产伦久视频在线观看| 久久精品动漫| 亚洲成人一区| 免费人成精品欧美精品| 免费观看在线色综合| 亚洲久久视频| 国产三级精品三级在线观看国产| 日韩黄色免费网站| 亚洲人成网站在线在线观看| 日韩欧美久久| 美女尤物国产一区| 国产成人精品一区二区三区视频 | 欧美不卡高清| 国产一区91| 青青国产91久久久久久| 国产精品丝袜在线播放| 久久久久久网| 欧美日韩精品免费观看视完整| 日韩欧美在线中字| 国产精品女主播一区二区三区| 日本在线不卡视频| 国产精品黄色| 激情六月综合| 久久精品97| 国产精品xxx| 91精品一区国产高清在线gif | 91免费精品国偷自产在线在线| 超碰99在线| 女人天堂亚洲aⅴ在线观看| 日本不卡视频在线观看| 老牛影视精品| 日本不卡视频在线观看| 久久久久免费| 在线观看亚洲精品福利片| 精品国产亚洲一区二区在线观看| 五月天久久网站| 精品国产欧美日韩| 蜜臀av一区二区在线免费观看 | 好看的亚洲午夜视频在线| 日韩高清电影一区| 日韩网站中文字幕| 久久国内精品视频| 亚洲精品123区| 日本不卡免费高清视频在线| 亚洲精品免费观看| 欧美成人高清| 在线日韩欧美| 国产精品高清一区二区| 国产剧情一区二区在线观看| 久久精品三级| 亚洲成人不卡| 亚洲一级在线| 日韩精品免费视频一区二区三区|