2017-09-05 13 views
1

以下のクラスをグローバル変数で作成しました。 しかし、なぜ私のスレッドは終了していない、または死んでしまったのですか?コアJavaマルチスレッド - スレッドが終了していません

作成したスレッドは、メインメモリからの読み出し/書き込みされることはありませんisRequestToStopの独自のバージョンを持って、揮発性がフラッシュされ、あなたの変数を強制します

private static volatile boolean isRequestToStop = false; 

あなたのブール変数は揮発性にする必要があり

public class MTTest { 
    private static boolean isRequestToStop = false; 

    public static void main(String [] args) throws Exception{ 


    Thread T = new Thread (new Runnable(){ 
     public void run(){ 

     while(!getRequestToStop()) { 
     //System.out.println(" Value is " +getRequestToStop()); 
     //System.out.println("Thread"); 
     } 
     } 

    }); 
    T.start(); 
    Thread.sleep(1000); 
    setRequestToStop(); 
    //isRequestToStop = true; 
    } 
    public static void setRequestToStop(){ 
    System.out.println("--- setRequestToStop()--- Called"); 
    isRequestToStop = true; 
    } 
    public static boolean getRequestToStop(){ 
    return isRequestToStop; 

    } 
} 

答えて

関連する問題