0

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

在 run 方法中,我有这样的东西:

public void run() {
    service.start();
}

service.start()花费的时间是巨大的。此外,我的应用程序并不总是需要运行线程,但无法提前决定,所以在启动应用程序时我正在启动这个线程。

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

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

4

4 回答 4

2

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

http://docs.oracle.com/javase/1.5.0/docs/guide/misc/threadPrimitiveDeprecation.html

于 2012-06-29T08:55:46.547 回答
1

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

You then need to catch the generated interrupted exception in the running thread or check the interrupted status regularly. Once the running thread detects that is should stop what it's doing, you can then run any cleanup tasks as required and exit whatever you were doing.

于 2012-06-29T08:58:00.540 回答
0

发信号通知你的线程去做它的清理工作,你说这很快,然后就做一个 Thread.join。

于 2012-06-29T08:54:08.450 回答
0

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

于 2012-06-29T08:56:59.553 回答