簡體   English   中英

volatile關鍵字無法停止Java中的循環

[英]volatile keyword can't stop loop in java

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關鍵字修改讀取時

private volatile static boolean ready ;

讀取的變量此時不會復制到過程存儲器中。 但是程序無法停止。 什么原因? 它與static關鍵字相關嗎?

如果要讓程序輸出50並返回,該怎么辦?

  1. 您需要調用start才能在另一個線程中執行代碼。 檢查一下 runstart之間的差異。

  2. 調用join以等待ReaderThread完成。

  3. volatile關鍵字可以在寫入線程和讀取線程之間建立一個事前發生的關系,您可以將number = 50; ready = true;之前ready = true; ,這使得確定的讀者會發現number50時注意readytrue

例:

Thread reader = new ReaderThread();
reader.start();
number = 50;
ready = true;
reader.join();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM