java - 何时在 ExecutorCompletionService 中使用 poll() 与 take()

标签 java multithreading executorservice executor

<分区>

在 ExecutorCompletionService 中我们有 take() 和 poll()。 一个阻塞直到队列有一个 future ,如果队列中没有 future ,另一个返回 null。但是什么时候使用 take() 和 poll() 。是否有任何特殊条件来决定这个或者我们可以选择任何 ??

最佳答案

当您的线程在等待队列中出现某些事情时可以执行其他事情时,您可以使用 poll() 。您编写一个调用 poll() 的循环,然后根据 poll() 是否返回值来做一件事或另一件事。

在多线程代码中使用 poll() IMO 有点代码味道。这意味着您有一个线程正在做两件不同的事情。为什么不在那种情况下使用两个线程?

关于java - 何时在 ExecutorCompletionService 中使用 poll() 与 take(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31357148/

相关文章:

Java:杀死由 ExecutorService 作为 Runnable 启动的线程

java - 如何从 Activity 返回到上一个 fragment

c# - 使用多个有限数量的线程处理项目列表

java - 从线程调用 bean 时,范围类型 javax.enterprise.context.RequestScoped 没有 Activity 上下文

C++:线程池比单线程慢?

java - 为什么我的线程失败时不会超时?

java - 如何使用 JFreeChart 动态更新图表?

java - 正则表达式优化问题

java - 如何用 "like"算子查询lucene?

java - 如果多个线程访问同一个私有(private)方法,变量值会混合吗?