我正在修改一些遗留代码以使用 Spring 的 ThreadPoolTaskExecutor
。此应用程序有一个父代理进程,它异步触发线程,然后使用 getState() 调用监视它们的状态。现在 ThreadPoolTaskExecutor
的 execute()
方法被用来触发子线程,getState()
总是返回“NEW”,即使在子线程的 run() 方法完成之后。
一种替代方法是在提供状态信息的子线程对象中手动维护一个属性,但我想知道在使用 ThreadPoolTaskExecutor
时是否有获取线程状态的已知方法。
最佳答案
而不是使用 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 - 如何使用 ThreadPoolTaskExecutor 获取线程状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10803446/