2016-11-28 1466 views
0

我正在使用ExecutorService(全局声明)同时运行多线程ExecutorService将需要一个小时才能完成任务。 所以我需要得到当前正在运行的线程详细信息,如活动线程,排队线程已完成线程从ExecutorService获取当前正在运行的线程对象

当我杀ExecutorService,在ExecutorService丧生,但该线程在后台运行。因此,在杀死ExecutorService之前,我需要获取线程对象ExecutorService并使用循环迭代器手动杀死线程。

例如:

ExecutorService有5个线程。

每个线程都由invokeall()执行。每个线程将在一小时后结束。

但事情是我需要在15分钟内停止通过发送新的请求到服务器或调用某种方法。

这里关机或关机现在停止执行程序,但不是那5个线程。 这就是问题所在。所以我需要手动杀死这些线程。如何杀死执行程序服务中手动附加的线程?

+0

正常情况下,您的主线程将在主线程上调用awaitTermination(),该线程将有效地加入它并防止在作业完成之前终止。你有迄今为止尝试过的任何代码吗? –

+1

可能重复的[如何等待所有线程完成,使用ExecutorService?](http://stackoverflow.com/questions/1250643/how-to-wait-for-all-threads-to-finish-using-executorservice ) – Sikorski

+0

您能否澄清一下:您是否需要自己获取*线程*或*任务*,为什么?正如其他评论所显示的,有办法知道执行者是否已完成其工作,获取待执行任务的数量,如果这是您的目标,那么线程实际上并不是**抽象的良好单位,一起工作。另外,你不能杀死和执行者服务,你只能关闭它,这对于它的任务和它的线程有什么不同的意义。也没有办法在Java中杀死线程(只有不推荐的,不可靠的方式) – GPI

回答

0

我找到了解决办法,所有线程都在追加可赎回,并 使用的ExecutorService调用可赎回线程。 ExecutorService只包含活动,队列和完成详细信息的值。执行后,结果将使用未来类获取该值。

现在,如果我想在完成之前停止执行。我需要调用可调用对象并将其转换为线程对象,并在线程不为空​​时手动停止。 因此,Callable对象也会变为全局变量。 结束执行删除这些对象。

相关问题