核心java多线程 - 线程不是结束

时间:2017-09-05 14:38:22

标签: java multithreading

使用全局变量创建了以下类。 但是为什么我的主题没有结束或者已经死了。

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;

  }
}

1 个答案:

答案 0 :(得分:2)

你需要使你的布尔变量volatile

private static volatile boolean isRequestToStop = false;

创建的线程有自己的isRequestToStop版本,不会从主内存中读/写,volatile会强制将你的变量刷新到主内存。

查看java文档以获取更多信息

https://docs.oracle.com/cd/E19683-01/806-5222/codingpractices-1/index.html