- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我的应用程序中,我必须从主应用程序线程异步处理多个作业并收集每个作业的结果。我有一个简单的 Java 解决方案,它使用 ExecutorService 和 ExecutorCompletionService 来收集作业结果。
现在我想将我的代码转换为 Spring 解决方案。 docs向我展示如何使用 ExecutorService 和 @Async 注释,但我不确定如何以及是否可以收集多个作业的结果。
换句话说:我正在寻找与 CompletionService 等效的 Spring。有这样的事吗?
我当前的代码:
class MyService {
private static ExecutorService executorService;
private static CompletionService<String> taskCompletionService;
// static init block
static {
executorService = Executors.newFixedThreadPool(4);
taskCompletionService = new ExecutorCompletionService<String>(executorService);
// Create thread that keeps looking for results
new Thread(new Runnable() {
@Override
public void run() {
while (true) {
try {
Future<String> future = taskCompletionService.take();
String s = future.get();
LOG.debug(s);
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
}
}
}).start();
}
// This method can and will be called multiple times,
// so multiple jobs are submitted to the completion service
public void solve(List<Long> ids) throws IOException, SolverException {
String data = createSolverData(ids);
taskCompletionService.submit(new SolverRunner(data, properties));
}
}
最佳答案
您需要考虑您的主要目标是什么,因为您当前的代码可以与其他与 Spring 相关的类一起正常工作。 Spring 提供对原生 Java ExecutorService 以及其他流行的 3rd 方库(如 Quartz)的支持
可能您所追求的是在spring容器上设置执行程序服务(例如:在您的spring beans xml上使用以下配置)
<bean id="taskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
<property name="corePoolSize" value="5" />
<property name="maxPoolSize" value="10" />
<property name="queueCapacity" value="25" />
</bean>
MyService
@Service
的类(class)注释并注入(inject)对执行器服务的引用
关于multithreading - Spring相当于CompletionService?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17285893/
我需要配置重试策略以通过 ExecutorCompletionService 调用 API。 示例代码: public void func() throws Exception{ Execut
我尝试在 Java 上制作多线程程序,打印返回已完成线程的结果。问题是,当我运行此代码时,它只是卡在队列中的第二个值上: System.out.println("[!] Creaing
我有这样的东西: ExecutorService executor = Executors.newFixedThreadPool(2); CompletionService completionSer
所以,我对多线程还很陌生,并且最近在我的所有程序中都使用了这个想法。在我开始更多地使用它之前,我真的想确保它是使用 Executor、CompletionService 和 BlockingQueue
我需要做这样的事情: ExecutorService executor = Executors.newFixedThreadPool(2); CompletionService completionS
java.util.concurrent.CompletionService 是对 ExecutorService 的一个功能增强封装,优化了获取异步操作结果的接口。 假设我们要向线程池提交一批任务,
如果'使用 System.Linq;'存在并且 System.Linq 是引用的程序集之一,我希望 int[] 数组上的 Completions 返回 LINQ 扩展方法,例如Select<>(...
我对 Java 并发包非常陌生。我使用 java.util.concurrent.CompletionService 类从池中获取结果,而无需等待其他线程完成任务。但即使执行了 10 分钟的代码,我也
我正在研究 CompletionService 类,我发现提交队列与完成队列的解耦非常有用。 但我也想念一种方法来轮询/接受已取消的任务(这在某种程度上可以被视为已完成)。可以通过某种方式轻松完成吗?
我需要在多核机器上处理大量(>1亿)请求(每个请求是处理一个数据文件中的一行,涉及到一些与远程系统的I/O。虽然细节做没关系,具体任务是从一些数据文件中加载一个分布式的 Hazelcast map )
我有一个在 Tomcat 容器内运行的简单 Web 服务,它本质上是多线程的。在进入服务的每个请求中,我想对外部服务进行并发调用。 java.util.concurrent 中的 ExecutorCo
我有一个由多个线程访问的类,每个线程请求该类的一个方法。每个方法依次执行多个 Callables。该类使用ExecutorService中的threadPool通过invokeAll((Collect
我使用包裹在 2 线程 FixedThreadPool ExecutorService 周围的 CompletionService 提交了一些 Future 任务,然后我设置了一个等于提交任务数量的循
我想使用 CompletionService 来处理来自一系列线程的结果当它们完成时。我有一个循环中的服务来获取它提供的 Future 对象,但我不知道确定所有线程何时完成(并因此退出循环)的最佳方法
AbstractExecutorService public abstract class AbstractExecutorService implements ExecutorService
我刚刚在 this blog post 中找到了 CompletionService .但是,这并没有真正展示 CompletionService 相对于标准 ExecutorService 的优势。
我正在尝试提交多个任务并在可用时获取结果。但是,循环结束后,我必须强制所有任务在指定的时间内完成。如果没有,则抛出错误。最初,我所拥有的只是 executorService 的 invokeAll、s
可以安全地假设 java.util.concurrent.CompletionService.take().isDone() 总是返回true?如果是这样,为什么 take() 返回一个 Future
有很多关于如何等待所有“worker”作业完成的示例,但是如何在每个 worker 完成时以与 Java 的 CompletionService 相同的方式使用react呢? 我已经破解了一些有用的东
我们需要在一个线程中完成一些工作,该线程将在使用 Spring Boot 的 Web 应用程序的服务器上运行。 我们想要发生的是:1) 工作作为我们自定义的 Runnable 对象提交2)轮到工作时就
我是一名优秀的程序员,十分优秀!