java - 如何使用 ThreadPoolTask​​Executor 获取线程状态?

标签 java multithreading spring

我正在修改一些遗留代码以使用 Spring 的 ThreadPoolTask​​Executor。此应用程序有一个父代理进程,它异步触发线程,然后使用 getState() 调用监视它们的状态。现在 ThreadPoolTask​​Executorexecute() 方法被用来触发子线程,getState() 总是返回“NEW”,即使在子线程的 run() 方法完成之后。

一种替代方法是在提供状态信息的子线程对象中手动维护一个属性,但我想知道在使用 ThreadPoolTask​​Executor 时是否有获取线程状态的已知方法。

最佳答案

而不是使用 Runnable 使用 Callable,而不是使用 execute 使用 submit。

Sample usage for Callable

    private class TaskCallable implements Callable<SomeResponse> {
        private final SomeRequest request;

        public TaskCallable (final SomeRequest request) {
            this.request = request;
        }

        public SomeResponse call() throws Exception {
            SomeResponse response = someService.getData(request);
            return response;
        }
    }

    TaskCallable callable = new TaskCallable(request);
    Future<SomeResponse> future = pooledExecutor.submit(callable);

你可以检查 future.isDone()

关于java - 如何使用 ThreadPoolTask​​Executor 获取线程状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10803446/

相关文章:

Java swing 定时器循环变慢

java - 当软键盘处于 Activity 状态时,设置文本不起作用

java - 为什么多线程 Java 程序在 'super' Linux 服务器上没有比笔记本电脑 Win7 更快?

c# - WindowsFormsSynchronizationContext.Current.Post 在后台线程上执行 lambda

java - OAuth2.0 - 使用 GitHub 进行身份验证,前端和后端运行在不同的服务器上。 CORS错误

java - ViewPager 的内存问题

java - OpenSSL 签名未在 Java 中验证

C++ 意外的多线程行为

java - Spring应用程序中dao中的泛型类型

java - Spring Boot 与 Flyway 集成 - init order