【问题标题】:What is the thread rejection policy of ForkJoinPool.commonPool()?ForkJoinPool.commonPool() 的线程拒绝策略是什么?
【发布时间】:2018-07-12 06:18:54
【问题描述】:

我的代码中有parallelStreams(),它使用的是ForkJoinPool

线程池执行器有 4 个预定义的处理程序策略,我想知道它在公共池中默认使用哪一个(如果有的话)。我在文档中找不到它。

在默认的 ThreadPoolExecutor.AbortPolicy 中,处理程序抛出一个 拒绝时出现运行时 RejectedExecutionException。

在 ThreadPoolExecutor.CallerRunsPolicy 中,调用的线程 execute 本身运行任务。这提供了一个简单的反馈控制 降低新任务提交速度的机制。

在ThreadPoolExecutor.DiscardPolicy中,一个不能执行的任务是 干脆掉了。

在ThreadPoolExecutor.DiscardOldestPolicy中,如果executor没有关闭 down,工作队列头部的任务被丢弃,然后 重试执行(可能再次失败,导致 重复。)

来自Oracle's documentation

【问题讨论】:

  • 这里说的不是common pool,是说ThreadPoolExecutors
  • "只有当池关闭或内部资源耗尽时,此实现才会拒绝提交的任务(即通过抛出 RejectedExecutionException)。来自 ForkJoinPool 的 javadoc。所以 AbortPolicy 仍然是默认的。
  • @Vasan,谢谢!错过了那部分....您可以添加作为答案吗?

标签: java threadpool threadpoolexecutor


【解决方案1】:

来自 ForkJoinPool 的javadoc

此实现拒绝提交的任务(即通过抛出 RejectedExecutionException) 仅在池关闭或 内部资源已经耗尽。

这与ThreadPoolExecutor.AbortPolicy 的行为相同。

【讨论】:

    猜你喜欢
    • 2017-04-28
    • 1970-01-01
    • 1970-01-01
    • 2020-08-16
    • 2021-08-05
    • 2021-12-02
    • 1970-01-01
    • 1970-01-01
    • 2018-12-10
    相关资源
    最近更新 更多