Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何停止Java线程?_Java_Multithreading - Fatal编程技术网

如何停止Java线程?

如何停止Java线程?,java,multithreading,Java,Multithreading,可能重复: 具有以下功能: destroy() stop() suspend() 但它们都不受欢迎。 你用什么来停止一个线程?你应该确保它只是在应该的时候运行/退出它自己 检查解释。您可以使用布尔标志来停止线程。您还可以使用来检查线程是否中断,并忽略与布尔标志相同的其余工作 class Worker implements Runnable { private volatile boolean shouldRun = true; @Override public

可能重复:

具有以下功能:

  • destroy()
  • stop()
  • suspend()
但它们都不受欢迎。

你用什么来停止一个线程?

你应该确保它只是在应该的时候运行/退出它自己


检查解释。

您可以使用布尔标志来停止线程。您还可以使用来检查线程是否中断,并忽略与布尔标志相同的其余工作

class Worker implements Runnable {
    private volatile boolean shouldRun = true;

    @Override
    public void run() {
        while (shouldRun) {
            // your code here
        }
    }

    public void cancel()
    {
        shouldRun = false;
    }
}

如果您想知道这些函数为何被弃用,您可以检查

您可以这样做:

private boolean running = true;

public void stop () {
    running = false;
}    

public void run () {
    while (running) { 
        //your code goes here
    }
}

这只是让run方法消失的一种简单方法

你礼貌地要求他结束工作。线程应该表现良好,当被要求时应该结束它的工作

要要求您使用
Thread.interrupt()
,它将抛出
InterruptedException
(如果线程正在等待)或在线程中设置标志(如果未等待)


当线程捕获到一个
中断异常时,或者如果它做了很多长时间的工作(没有睡眠/等待),那么线程应该退出它的工作它应该不时检查它是否被中断,如果被中断则退出。

您提到的方法已被弃用,因为一旦使用,它们可能会使系统处于不稳定状态:就像kill进程一样。使用这些方法不会给线程任何优雅退出的机会

结论是,您正在实现的每个线程都应该有自己的优雅退出机制。通常您会执行以下操作。创建
boolean
标志
exit
,默认情况下该标志为
false
。线程的
run()
方法应该实现如下循环:

while (!exit) {
    // do the job
}
添加方法
exit()。退出时应注意关闭资源等


显然,您可以通过发送sing

任何线程运行来改进机制。它应该自己决定是否还有更多的工作要做。当您想要停止一个工作线程时,这意味着该线程认为该工作存在,但您不希望该线程执行该工作。这绝对是您设计中的一个问题。在一个设计良好的问题中,不需要停止/恢复线程。

你不需要停止线程,只需要让
run
方法完成它的执行。你能详细说明你为什么要停止线程吗?为了完整性,另一种方法是终止整个进程——这将起作用。在线程外部或线程中的字段上设置一个标志,并在标志更改为true时进行线程检查。当它返回时,使run方法返回。设置标志以使线程退出自身。simples+1的运行需要是易变的,否则run()可能永远不会停止。