【问题标题】:When to use poll() vs take() in ExecutorCompletionService [duplicate]何时在 ExecutorCompletionService 中使用 poll() 与 take() [重复]
【发布时间】:2015-07-11 12:23:27
【问题描述】:

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

【问题讨论】:

  • 这肯定是用例吗?您使用合适的工作!
  • @BoristheSpider 我猜 OP 想知道至少一个使用这两种方法的用例。
  • @CKing 那么,在我看来,这个问题在这里是题外话。
  • @BoristheSpider 在我看来,这可能是一个基于意见的答案。
  • take() 是一个阻塞 API。这意味着您的线程此时会阻塞。 poll() 是一个非阻塞 API。这意味着如果没有可用的内容,您可以继续处理。这有什么令人困惑的?如果你不能继续执行而不检索某些东西显然你需要阻止

标签: java multithreading executorservice executor


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2014-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-05
    • 1970-01-01
    • 2014-08-19
    • 2023-04-02
    • 2018-01-29
    相关资源
    最近更新 更多