java:停止单例线程
我有一个扩展线程的类XYZ,它也是一个单例(是的,我的应用程序需要它) 在run方法中,我有如下内容:java:停止单例线程,java,multithreading,Java,Multithreading,我有一个扩展线程的类XYZ,它也是一个单例(是的,我的应用程序需要它) 在run方法中,我有如下内容: public void run() { service.start(); } service.start()所需的时间非常长。 此外,我的应用程序并不总是需要运行线程,但无法提前决定,因此在启动应用程序时,我将启动此线程 现在,当应用程序不需要线程时,它会很快完成,我需要做的就是等待线程死亡 我试图使用stop()方法,但后来知道它已被弃用 给你的线程发信号,让它做清理工作,你说它很
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可能在某处有一个循环来检查中断状态).好的。谢谢。但是服务是外部库类的对象。我不明白正确清理的意义。好的。谢谢。但是服务是外部库类的对象。我不明白正确清理的意义。