我正在使用ExecutorService
(全局声明)同时运行多线程。
ExecutorService
将花费一个小时来完成任务。
所以我需要获取当前正在运行的线程详细信息,如活动线程,排队线程和已完成线程。
当我杀死 ExecutorService
时, ExecutorService
被杀,但线程在后台运行。因此,在杀死ExecutorService之前,我需要获取线程对象形式 ExecutorService
并使用 loop 或 iterator 手动终止线程。
例如:
ExecutorService有5个帖子。
每个线程都由invokeall()执行。每个帖子将在一小时后结束。
但事情是我需要在15分钟内通过向服务器发送新请求或调用某种方法来停止。
这里shutdown或shutdowNow停止执行程序但不停止那5个线程。 那就是问题所在。所以我需要手动杀死这些线程。如何杀死在executor服务中手动附加的线程?
答案 0 :(得分:0)
我找到了解决方案,所有线程都附加在Callable中,并且 使用 ExecutorService 调用 Callable 线程。 ExecutorService 仅包含活动,队列和已完成详细信息的值。执行后,结果将使用 Future 类获取值。
现在,如果我想在完成之前停止执行。我需要调用可调用对象并转换为线程对象并在线程不为空时手动停止。 因此,Callable对象也会更改为全局变量。 结束执行删除这些对象。