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 - Fatal编程技术网

java:停止单例线程

java:停止单例线程,java,multithreading,Java,Multithreading,我有一个扩展线程的类XYZ,它也是一个单例(是的,我的应用程序需要它) 在run方法中,我有如下内容: public void run() { service.start(); } service.start()所需的时间非常长。 此外,我的应用程序并不总是需要运行线程,但无法提前决定,因此在启动应用程序时,我将启动此线程 现在,当应用程序不需要线程时,它会很快完成,我需要做的就是等待线程死亡 我试图使用stop()方法,但后来知道它已被弃用 给你的线程发信号,让它做清理工作,你说它很

我有一个扩展线程的类XYZ,它也是一个单例(是的,我的应用程序需要它)

在run方法中,我有如下内容:

public void run() {
    service.start();
}
service.start()所需的时间非常长。 此外,我的应用程序并不总是需要运行线程,但无法提前决定,因此在启动应用程序时,我将启动此线程

现在,当应用程序不需要线程时,它会很快完成,我需要做的就是等待线程死亡


我试图使用stop()方法,但后来知道它已被弃用

给你的线程发信号,让它做清理工作,你说它很快,然后只做一个线程。加入。

给你的线程发信号,让它做清理工作,你说它很快,然后只做一个线程。加入。

有关调用
停止()


有关调用
stop()的替代方法,请参阅本文。


您的问题在很大程度上取决于
服务.start()中到底发生了什么。
。如果它正在打开外部资源,那么自然地,您不能在没有适当清理的情况下直接闯入并杀死线程。
start
过程需要明确编码,以确保正确清理时的可中断性。

您的问题在很大程度上取决于
service.start()
中到底发生了什么。如果它正在打开外部资源,那么自然地,您不能在没有适当清理的情况下直接闯入并杀死线程。
start
过程需要明确编码,以便在适当清理的情况下实现可中断性。

stop
很久以前就被弃用,不应使用。线程终止在Java中是一个协作过程(即被中断的代码在被要求停止时必须执行某些操作,而不是中断代码)——一种方法是在需要中断的线程上调用
Thread.interrupt()


然后,您需要在运行线程中捕获生成的中断异常,或者定期检查中断状态。一旦运行的线程检测到is应该停止它正在做的事情,您就可以根据需要运行任何清理任务并退出您正在做的任何事情。

stop
早就被弃用了,不应该使用。线程终止在Java中是一个协作过程(即被中断的代码在被要求停止时必须执行某些操作,而不是中断代码)——一种方法是在需要中断的线程上调用
Thread.interrupt()


然后,您需要在运行线程中捕获生成的中断异常,或者定期检查中断状态。一旦运行的线程检测到is应该停止它正在做的事情,您就可以根据需要运行任何清理任务并退出您正在做的任何事情。

这是-这是。但正如@MarkoTopolnik所指出的,如果不知道service.start()在做什么,就很难判断哪个解决方案更好。理想情况下,如果它抛出InterruptedException(并正确处理),您可以简单地中断它。为什么所有这些示例都假设线程在其运行方法中执行循环?如果service.start抛出InterruptedException,您不需要循环-请参阅我的第二个链接(虽然service.start可能会在某个地方有一个循环来检查中断状态)。这是-这是。但正如@MarkoTopolnik指出的,在不知道service.start()的作用时,很难判断哪个解决方案更好。理想情况下,如果它抛出InterruptedException(并正确处理它),您可以简单地中断它。为什么所有这些示例都假设线程在其运行方法中执行循环?如果service.start抛出InterruptedException,您不需要循环-请参阅我的第二个链接(尽管service.start可能在某处有一个循环来检查中断状态).好的。谢谢。但是服务是外部库类的对象。我不明白正确清理的意义。好的。谢谢。但是服务是外部库类的对象。我不明白正确清理的意义。