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
Multithreading 在java中停止线程的最佳方法是什么?_Multithreading_Interrupt_Interrupt Handling - Fatal编程技术网

Multithreading 在java中停止线程的最佳方法是什么?

Multithreading 在java中停止线程的最佳方法是什么?,multithreading,interrupt,interrupt-handling,Multithreading,Interrupt,Interrupt Handling,我想在执行过程中停止一个线程。通过阅读,我认为我必须检查一个局部变量,以确定线程是应该继续还是应该清理并退出run()。有没有干净地实现这一点的想法?您可以使用该方法。您可以在退出线程之前进行一些清理。一个简单的教程是实现这一点的方法通常是创建一个布尔volatile成员变量,可能称为“stopThread”。线程定期轮询此变量,以查看它是否应该终止。中断方法是不够的。例如,如果一个线程正在通过ftp发送一个大文件(4GB),则从另一个线程调用中断不会起任何作用,直到该线程阻塞为止。您可以使用i

我想在执行过程中停止一个线程。通过阅读,我认为我必须检查一个局部变量,以确定线程是应该继续还是应该清理并退出run()。有没有干净地实现这一点的想法?

您可以使用该方法。您可以在退出线程之前进行一些清理。一个简单的教程是

实现这一点的方法通常是创建一个布尔volatile成员变量,可能称为“stopThread”。线程定期轮询此变量,以查看它是否应该终止。

中断方法是不够的。例如,如果一个线程正在通过ftp发送一个大文件(4GB),则从另一个线程调用中断不会起任何作用,直到该线程阻塞为止。您可以使用isInterrupted()或interrupted()(重置状态标志)查看该文件是否被中断。在某些情况下,可能需要这两种方法的混合。@NullPointer0x00对于中断和布尔变量来说,长持续时间操作都是一个问题。这两种方法的组合可能更能吸引线程的注意。当然,这取决于线程应该做什么。谢谢,这是我想我会做的。我制作了一个名为“resume”的布尔变量。我喜欢“stopThread”,我必须确保我做了适当的清理。注意答案中提到的“volatile”关键字很重要。如果没有它,就不能保证对布尔值的任何更改对相关线程都是可见的。