亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

java中的volatile關鍵字不能停止循環

java中的volatile關鍵字不能停止循環

呼啦一陣風 2022-07-06 18:44:09
public class VolatileOne {    private static boolean ready ;    private static int number ;    private static class ReaderThread extends Thread{        @Override        public void run() {            while (!ready){                Thread.yield();            }            System.out.print(number);        }    }    public static void main(String[] args) {        new ReaderThread().run();        ready = true;        number = 50;    }}運行這段代碼后,程序并沒有停止,這很明顯,因為線程將準備好的變量備份到自己進程的內存中。當我使用 volatile 關鍵字修改 readprivate volatile static boolean ready ;此時讀取的變量不會被復制到進程內存中。但程序不能停止。什么原因?它與靜態關鍵字有關嗎?如果你想讓程序輸出50并返回,你應該怎么做?
查看完整描述

1 回答

?
德瑪西亞99

TA貢獻1770條經驗 獲得超3個贊

  1. 您需要調用start才能在另一個線程中執行代碼。檢查這個run和之間的區別start。

  2. 打電話join等待ReaderThread完成。

  3. volatile關鍵字可以在寫線程和讀線程之間建立起一個happens-before關系,你可以放number = 50;before ready = true;,這樣可以保證讀者會注意到number50什么時候注意到readytrue。

例子:

Thread reader = new ReaderThread();

reader.start();

number = 50;

ready = true;

reader.join();


查看完整回答
反對 回復 2022-07-06
  • 1 回答
  • 0 關注
  • 147 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號