gpt4 book ai didi

java - 如果需要更多时间,则终止 threadexecutor 中的任务

转载 作者:太空宇宙 更新时间:2023-11-04 08:29:59 26 4
gpt4 key购买 nike

这是场景:

我有一个 java 主进程,它使用 JMS 发布到某些 ActiveMQ 代理。

每次要向代理发送消息时,都会使用固定大小的线程池(使用 ThreadExecutor)中的一个线程,并在其中进行发布调用。

现在,发布调用是一个阻塞调用,如果代理关闭,线程本身将继续等待。

我想创建一个线程池,这样如果特定线程在 X 时间内没有完成任务,它就会简单地返回,即如果代理关闭并且发布没有完成,则线程不会继续等待,而是返回到池中。

目前还没有办法使这个发布调用异步,所以我猜处理这种情况的唯一方法就是上面提到的方法。

如果线程无法在给定的时间范围内完成任务,是否有任何 ThreadExecutor 允许我立即终止线程?

希望有人提供更优雅的解决方案。

最佳答案

ExecutorService接口(interface)提供带有 timeout 参数的 invokeAll()invokeAny() 方法。

示例:

ExecutorService executor = Executors..newFixedThreadPool(2);
executor.invokeAll(Arrays.asList(new Callable<Void>(){

@Override
public Void call() throws Exception {
try {
// do your task
} catch (InterruptedException e) {
// your task was forced to end
}
return null;
}

}), 5, TimeUnit.SECONDS);
executor.shutdown();

关于java - 如果需要更多时间,则终止 threadexecutor 中的任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7729069/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com