Skip to content

ThreadPoolExecutor 饱和策略部分的错误 #802

@devlzh

Description

@devlzh

有一个疑问

ThreadPoolExecutor.CallerRunsPolicy 当最大池被填满时,此策略为我们提供可伸缩队列。(这个直接查看 ThreadPoolExecutor 的构造函数源码就可以看出,比较简单的原因,这里就不贴代码了)

我看了 ThreadPoolExecutor 的构造函数源码并没发现当最大池被填满时, ThreadPoolExecutor.CallerRunsPolicy 可以提供可伸缩队列。

然后搜索相关问题发现以下链接中ThreadPoolExecutor 饱和策略部分完全一样,错误部分已加粗

如果当前同时运行的线程数量达到最大线程数量并且队列也已经被放满了任时,ThreadPoolTaskExecutor 定义一些策略:
ThreadPoolExecutor.AbortPolicy:抛出 RejectedExecutionException来拒绝新任务的处理。
ThreadPoolExecutor.CallerRunsPolicy:调用执行自己的线程运行任务。您不会任务请求。但是这种策略会降低对于新任务提交速度,影响程序的整体性能。另外,这个策略喜欢增加队列容量。如果您的应用程序可以承受此延迟并且你不能任务丢弃任何一个任务请求的话,你可以选择这个策略。
ThreadPoolExecutor.DiscardPolicy: 不处理新任务,直接丢弃掉。
ThreadPoolExecutor.DiscardOldestPolicy: 此策略将丢弃最早的未处理的任务请求。

https://snailclimb.gitee.io/javaguide/#/docs/java/Multithread/JavaConcurrencyAdvancedCommonInterviewQuestions

http://www.mianshigee.com/question/10150vgo

https://blog.csdn.net/qq_23145857/article/details/105366265

https://blog.csdn.net/agonie201218/article/details/106187740

https://www.cnblogs.com/1994jinnan/p/12331591.html

https://www.lagou.com/lgeduarticle/72192.html

https://www.cnblogs.com/ustc-anmin/p/11753277.html

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions