我正在使用ExecutorService
(全局声明)同时运行多线程。 ExecutorService
将需要一个小时才能完成任务。 所以我需要得到当前正在运行的线程详细信息,如活动线程,排队线程和已完成线程。从ExecutorService获取当前正在运行的线程对象
当我杀ExecutorService
,在ExecutorService
丧生,但该线程在后台运行。因此,在杀死ExecutorService之前,我需要获取线程对象ExecutorService
并使用循环或迭代器手动杀死线程。
例如:
ExecutorService有5个线程。
每个线程都由invokeall()执行。每个线程将在一小时后结束。
但事情是我需要在15分钟内停止通过发送新的请求到服务器或调用某种方法。
这里关机或关机现在停止执行程序,但不是那5个线程。 这就是问题所在。所以我需要手动杀死这些线程。如何杀死执行程序服务中手动附加的线程?
正常情况下,您的主线程将在主线程上调用awaitTermination(),该线程将有效地加入它并防止在作业完成之前终止。你有迄今为止尝试过的任何代码吗? –
可能重复的[如何等待所有线程完成,使用ExecutorService?](http://stackoverflow.com/questions/1250643/how-to-wait-for-all-threads-to-finish-using-executorservice ) – Sikorski
您能否澄清一下:您是否需要自己获取*线程*或*任务*,为什么?正如其他评论所显示的,有办法知道执行者是否已完成其工作,获取待执行任务的数量,如果这是您的目标,那么线程实际上并不是**抽象的良好单位,一起工作。另外,你不能杀死和执行者服务,你只能关闭它,这对于它的任务和它的线程有什么不同的意义。也没有办法在Java中杀死线程(只有不推荐的,不可靠的方式) – GPI