- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我刚刚在 this blog post 中找到了 CompletionService .但是,这并没有真正展示 CompletionService 相对于标准 ExecutorService 的优势。可以用其中任何一个编写相同的代码。那么,CompletionService 什么时候有用?
您能否提供一个简短的代码示例以使其一目了然?例如,此代码示例仅显示不需要 CompletionService 的位置(=相当于 ExecutorService)
ExecutorService taskExecutor = Executors.newCachedThreadPool();
// CompletionService<Long> taskCompletionService =
// new ExecutorCompletionService<Long>(taskExecutor);
Callable<Long> callable = new Callable<Long>() {
@Override
public Long call() throws Exception {
return 1L;
}
};
Future<Long> future = // taskCompletionService.submit(callable);
taskExecutor.submit(callable);
while (!future.isDone()) {
// Do some work...
System.out.println("Working on something...");
}
try {
System.out.println(future.get());
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
最佳答案
省略很多细节:
关于java - 什么时候应该使用 CompletionService 而不是 ExecutorService?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4912228/
我需要配置重试策略以通过 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)轮到工作时就
我是一名优秀的程序员,十分优秀!