Java 从ExecutorService获取当前正在运行的线程对象

Java 从ExecutorService获取当前正在运行的线程对象,java,executorservice,Java,Executorservice,我正在使用ExecutorService(全局声明)同时运行多线程。 ExecutorService需要一个小时才能完成任务。 因此,我需要获取当前正在运行的线程的详细信息,如活动线程、排队线程和已完成线程 当我终止ExecutorService时,ExecutorService终止,但线程在后台运行。因此,在终止ExecutorService之前,我需要获取线程对象表单ExecutorService,并使用循环或迭代器手动终止线程 例如: ExecutorService有5个线程 每个线程都通

我正在使用
ExecutorService
(全局声明)同时运行多线程。
ExecutorService
需要一个小时才能完成任务。 因此,我需要获取当前正在运行的线程的详细信息,如活动线程、排队线程和已完成线程

当我终止
ExecutorService
时,
ExecutorService
终止,但线程在后台运行。因此,在终止ExecutorService之前,我需要获取线程对象表单
ExecutorService
,并使用循环或迭代器手动终止线程

例如:

ExecutorService有5个线程

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

但问题是,我需要在15分钟内停止,向服务器发送新请求或调用某些方法

这里shutdown或shutdown停止执行器,但不停止这5个线程。
这就是问题所在。所以我需要手动终止这些线程。如何终止executor服务中手动附加的线程?

我找到了解决方案,所有线程都可以在可调用中附加,并且 使用ExecutorService调用可调用线程。ExecutorService仅包含active、queue和completed details的值。执行后,结果将使用Future类获取值

现在,如果我想在完成之前停止执行。我需要调用可调用对象并转换为线程对象,若线程不为null,则手动停止。 所以,可调用对象也会变为全局变量。
结束执行删除这些对象。

我找到了解决方案,所有线程都可在可调用中追加,并且 使用ExecutorService调用可调用线程。ExecutorService仅包含active、queue和completed details的值。执行后,结果将使用Future类获取值

现在,如果我想在完成之前停止执行。我需要调用可调用对象并转换为线程对象,若线程不为null,则手动停止。 所以,可调用对象也会变为全局变量。
结束执行删除这些对象。

通常,主线程将在主线程上调用
awaittemination()
,这将有效地连接它并防止在作业完成之前终止。到目前为止,您是否有任何已经尝试过的代码?可能重复的代码您能否澄清:您是否需要获取线程或任务本身,以及为什么?正如其他评论所显示的,有很多方法可以知道执行者是否已经完成了它的工作,获取挂起任务的数量。。。如果这是您的目标,那么线程实际上根本不是一个好的抽象单元。另外,您不能终止和执行服务,您只能关闭它,这对它的任务和线程有不同的意义。Java中也没有杀死线程的方法(只有不推荐的、不可靠的方法),请参阅:。它表示大多数实现将试图通过调用Thread.interrupt()终止正在运行的线程。问题可能是线程忽略了中断。除非这些线程进行执行该检查的系统调用,否则您需要手动检查中断并做出相应的响应。通常,主线程将在主线程上调用
waittermination()。到目前为止,您是否有任何已经尝试过的代码?可能重复的代码您能否澄清:您是否需要获取线程或任务本身,以及为什么?正如其他评论所显示的,有很多方法可以知道执行者是否已经完成了它的工作,获取挂起任务的数量。。。如果这是您的目标,那么线程实际上根本不是一个好的抽象单元。另外,您不能终止和执行服务,您只能关闭它,这对它的任务和线程有不同的意义。Java中也没有杀死线程的方法(只有不推荐的、不可靠的方法),请参阅:。它表示大多数实现将试图通过调用Thread.interrupt()终止正在运行的线程。问题可能是线程忽略了中断。除非这些线程进行执行该检查的系统调用,否则您需要手动检查中断并做出相应的响应。