用Java终止一个线程

时间:2015-09-23 17:22:25

标签: java android multithreading

首先:抱歉这个不起眼的问题!

考虑一个正常的基本Java程序:

public class TestClass {
    public static void main(String[] args) {

        Thread t=new Thread()
        {
            public boolean isRunning;
            public void run()
            {
                while(isRunning);
            }
        }
        t.isRunning=true;
        t.start();
        t=null;
    }
}

线程会永远不会运行吗?

当我意外地将其设置为null时,如何在上面的代码中停止线程?或者如果由于某种原因Thread对象变得无效会发生什么?

基本上程序是如何表现的?我能以某种方式查询一个正在运行的线程而没有任何引用它,我只是以某种方式停止()它?

那么Thread对象何时还拥有一些需要的数据并将在run方法中使用呢?它们是空的还是仍然可以被访问?

如果是这样,重新获得对象的引用真的很重要

编辑:我在问题中添加了一个android标签。我更想到Android环境。应用程序的进程可以非常容易地被杀死,并且事情可能会出错,以至于线程无效但执行仍在继续,因此再次获取线程的引用非常重要。就像当一个活动被系统杀死时,它对线程的引用也消失了。因此,在发生内存泄漏之前,我必须做些什么来防止在启动另一个之前有一个正在进行的线程

1 个答案:

答案 0 :(得分:1)

这是线程泄漏的情况。如果你继续这样做(即开始一个线程并忘记它),你很快就会得到java.lang.OutOfMemoryError: Unable to create new native thread例外。

您应始终使用受控线程池(如ExecutorService)并在finally子句中将其关闭,或使用Runtime.getRuntime().addShutdownHook注册关闭钩子以关闭线程池/线程