【问题标题】:Core java Multi Threading - Thread is not Ending [duplicate]核心java多线程 - 线程没有结束[重复]
【发布时间】:2018-02-13 21:47:39
【问题描述】:

已经用全局变量创建了下面的类。 但是为什么我的线程没有结束或死亡。

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;

  }
}

【问题讨论】:

    标签: java multithreading


    【解决方案1】:

    你需要让你的布尔变量可变

    private static volatile boolean isRequestToStop = false;
    

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

    查看 java 文档了解更多信息

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-21
      • 2013-03-02
      • 2011-02-07
      • 2013-08-17
      • 2013-05-19
      • 2016-02-09
      • 2013-12-17
      • 1970-01-01
      相关资源
      最近更新 更多