Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.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_Exception_Kill Process - Fatal编程技术网

通过引发异常终止Java线程

通过引发异常终止Java线程,java,multithreading,exception,kill-process,Java,Multithreading,Exception,Kill Process,我认为在你想要的时间杀死一根线对很多人来说是个问题。我最近遇到了一种通过抛出异常终止线程的方法。您对此有何想法/意见?以前有人实现过类似的功能吗?您不应该终止线程。你应该让它停下来。如果你有一个循环,你应该停止这个循环。如果你有一些耗时的功能,比如网络连接,你应该停止这个网络功能而不是终止线程。无法保证使用thread.stop函数停止线程。停止线程的最佳方法是从线程内抛出InterruptedException。如果抛出异常,这将确保执行catch和finally块,以便线程能够释放锁和资源,

我认为在你想要的时间杀死一根线对很多人来说是个问题。我最近遇到了一种通过抛出异常终止线程的方法。您对此有何想法/意见?以前有人实现过类似的功能吗?

您不应该终止线程。你应该让它停下来。如果你有一个循环,你应该停止这个循环。如果你有一些耗时的功能,比如网络连接,你应该停止这个网络功能而不是终止线程。无法保证使用thread.stop函数停止线程。停止线程的最佳方法是从线程内抛出InterruptedException。如果抛出异常,这将确保执行catch和finally块,以便线程能够释放锁和资源,关闭已打开的文件和连接,等等

通常,您希望从另一个线程停止一个线程。您不应该使用Thread.stop方法,因为它会立即停止线程,当关闭的线程仍然拥有锁、从未关闭的文件等时,会导致死锁。停止线程的官方方法是对要停止的线程调用中断方法。这将设置一个内部标志,可由Thread.interrupted检查。现在,每个线程都应该在方便的时候轮询thread.interrupted,如果设置了以下标志,则抛出InterruptedException:

if (Thread.interrupted()) throw new InterruptedException();  

你是从哪里想到杀死一个线程对很多人来说都是一个问题的?你可以使用/调用thread.interrupt方法来终止线程。@rakessoni不,你至少不能终止任何给定的线程,但你可以使用thread.stop。问题是,您不应该这样做。请注意thread.stop已被弃用。@Rakessoni它已弃用,这意味着不应该使用它。这并不意味着它不起作用。哦,Thread.stop会很好地停止线程,除非安全管理器阻止它。这不是很温和,可能是。但函数本身并不受欢迎。这意味着,你不应该使用它。甚至,该函数也可以在某个时候从jre中删除。没错,你不应该使用它,因为它有问题。然而,即使在理论上它可能被移除,它也不太可能被移除。这样做弊大于利。那么,当您需要在精确的时间停止线程时,您会怎么做?如果无论发生什么情况都要立即取消该线程,则thread.stop是唯一可以这样做的方法。不管怎样,你最好准备好处理这件事的后果。从评论中,你应该意识到OP的问题恰恰是他不能保证要停止的线程会到达方便的时间。@ErwinSmout。真正地我看到OP的一条评论,1是在我输入答案时添加的,所以我以前没有读过,2似乎没有说你所说的,只是他希望线程在一个精确的时间停止。关键是,您不能在精确的时间安全地停止线程,因为您需要给线程时间来清理,任何好的答案都应该指出这一点。