Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
清新范er
JavaGuide
提交
4edd4c27
J
JavaGuide
项目概览
清新范er
/
JavaGuide
与 Fork 源项目一致
从无法访问的项目Fork
通知
4
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
J
JavaGuide
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
4edd4c27
编写于
11月 13, 2019
作者:
K
Kou Shuang
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
线程池学习总结
上级
4f7cf077
变更
2
显示空白变更内容
内联
并排
Showing
2 changed file
with
12 addition
and
9 deletion
+12
-9
README.md
README.md
+1
-1
docs/java/Multithread/java线程池学习总结.md
docs/java/Multithread/java线程池学习总结.md
+11
-8
未找到文件。
README.md
浏览文件 @
4edd4c27
...
...
@@ -92,7 +92,7 @@
*
**[Java 并发进阶常见面试题总结](docs/java/Multithread/JavaConcurrencyAdvancedCommonInterviewQuestions.md)**
*
[
并发容器总结
](
docs/java/Multithread/并发容器总结.md
)
*
**[Java线程池学习总结](./docs/java/Multithread/java线程池学习总结.md)**
*
[
(待办)
如何确定线程池线程数量?
](
)
*
[
如何确定线程池线程数量?
](
)
*
[
乐观锁与悲观锁
](
docs/essential-content-for-interview/面试必备之乐观锁与悲观锁.md
)
*
[
JUC 中的 Atomic 原子类总结
](
docs/java/Multithread/Atomic.md
)
...
...
docs/java/Multithread/java线程池学习总结.md
浏览文件 @
4edd4c27
...
...
@@ -121,13 +121,14 @@ public class ScheduledThreadPoolExecutor
/**
* 用给定的初始参数创建一个新的ThreadPoolExecutor。
*/
public
ThreadPoolExecutor
(
int
corePoolSize
,
int
maximumPoolSize
,
long
keepAliveTime
,
TimeUnit
unit
,
BlockingQueue
<
Runnable
>
workQueue
,
ThreadFactory
threadFactory
,
RejectedExecutionHandler
handler
)
{
public
ThreadPoolExecutor
(
int
corePoolSize
,
//线程池的核心线程数量
int
maximumPoolSize
,
//线程池的最大线程数
long
keepAliveTime
,
//当线程数大于核心线程数时,多余的空闲线程存活的最长时间
TimeUnit
unit
,
//时间单位
BlockingQueue
<
Runnable
>
workQueue
,
//任务队列,用来储存等待执行任务的队列
ThreadFactory
threadFactory
,
//线程工厂,用来创建线程,一般默认即可
RejectedExecutionHandler
handler
//拒绝策略,当提交的任务过多而不能及时处理时,我们可以定制策略来处理任务
)
{
if
(
corePoolSize
<
0
||
maximumPoolSize
<=
0
||
maximumPoolSize
<
corePoolSize
||
...
...
@@ -168,7 +169,9 @@ public class ScheduledThreadPoolExecutor
-
**`ThreadPoolExecutor.DiscardPolicy`:**
不处理新任务,直接丢弃掉。
-
**`ThreadPoolExecutor.DiscardOldestPolicy`:**
此策略将丢弃最早的未处理的任务请求。
举个例子: Spring 通过
`ThreadPoolTaskExecutor`
或者我们直接通过
`ThreadPoolExecutor`
的构造函数创建线程池的时候,当我们不指定
`RejectedExecutionHandler`
饱和策略的话来配置线程池的时候默认使用的是
`ThreadPoolExecutor.AbortPolicy`
。在默认情况下,
`ThreadPoolExecutor`
将抛出
`RejectedExecutionException`
来拒绝新来的任务 ,这代表你将丢失对这个任务的处理。 对于可伸缩的应用程序,建议使用
`ThreadPoolExecutor.CallerRunsPolicy`
。当最大池被填满时,此策略为我们提供可伸缩队列。(这个直接查看
`ThreadPoolExecutor`
的构造函数源码就可以看出,比较简单的原因,这里就不贴代码了。)
举个例子:
> Spring 通过 `ThreadPoolTaskExecutor` 或者我们直接通过 `ThreadPoolExecutor` 的构造函数创建线程池的时候,当我们不指定 `RejectedExecutionHandler` 饱和策略的话来配置线程池的时候默认使用的是 `ThreadPoolExecutor.AbortPolicy`。在默认情况下,`ThreadPoolExecutor` 将抛出 `RejectedExecutionException` 来拒绝新来的任务 ,这代表你将丢失对这个任务的处理。 对于可伸缩的应用程序,建议使用 `ThreadPoolExecutor.CallerRunsPolicy`。当最大池被填满时,此策略为我们提供可伸缩队列。(这个直接查看 `ThreadPoolExecutor` 的构造函数源码就可以看出,比较简单的原因,这里就不贴代码了。)
### 3.2 推荐使用 `ThreadPoolExecutor` 构造函数创建线程池
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录