核心java多线程 - 线程没有结束[重复]

Posted

技术标签:

【中文标题】核心java多线程 - 线程没有结束[重复]【英文标题】:Core java Multi Threading - Thread is not Ending [duplicate] 【发布时间】: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;

  

【问题讨论】:

【参考方案1】:

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

private static volatile boolean isRequestToStop = false;

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

查看 java 文档了解更多信息

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

【讨论】:

以上是关于核心java多线程 - 线程没有结束[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Java多线程编程核心技术,第五章

java多线程编程核心技术——全书总结

java多线程之ForkJoinPool

Java核心技术卷一 8. java并发

《Java 多线程编程核心技术》- 笔记

java多线程编程核心技术怎么样