博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
线程池构造参数分析
阅读量:7098 次
发布时间:2019-06-28

本文共 1132 字,大约阅读时间需要 3 分钟。

hot3.png

ThreadPoolExecutor

首先看看ThreadPoolExecutor的构造函数,ThreadPoolExecutor提供了几个构造函数,我们先来参数最全构造函数的含义。

public ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime,TimeUnit unit,BlockingQueue
workQueue,ThreadFactory threadFactory,RejectedExecutionHandler handler)

corePoolSize: 线程池维护线程的最少数量 

maximumPoolSize:线程池维护线程的最大数量 
keepAliveTime: 线程池维护线程所允许的空闲时间 
unit: 线程池维护线程所允许的空闲时间的单位 
workQueue: 线程池所使用的缓冲队列 
handler: 线程池对拒绝任务的处理策略

1,首先前四个参数共同负责线程的创建和销毁。

2,线程池利用队列来保存等待执行的任务。其中包括无界队列、有界队列和同步移交。

newFixedThreadPool 和 newSingleThreadExecutor 在默认情况使用的是无界队列LinkedBlockingQueue.如果任务持续快速的到达,超出了线程池的处理速度,那队列将会无限制的增大。

更稳妥的方式是使用有界队列。但有界队列引出的问题是队列填满后,新的任务怎么处理?这里引出饱和策略,将在3中说明有哪些饱和策略。

对于非常大或者无界的线程池,可以使用SynchronousQueue来避免任务排队,以及直接将任务从生产者移交到工作者线程。SynchronousQueue不是一个真正的队列,它主要是一种在线程之间进行移交的机制。要将元素放进SynchronousQueue中必须有另一个线程等待接受该任务。如果没有线程等待,并且线程池大小小于线程池的最大值,则创建一个新的线程。否则根据饱和策略来处理。使用直接移交更加的高效,因为任务会直接移交给执行他的线程,而不是放到队列中,由他的工作线程从队列中提取任务。只有当线程池是无界或饱和策略可以拒绝任务时,SynchronousQueue才有实际价值。

3,饱和策略

“中止”策略是默认的饱和策略,该策略会抛出RejectedExecutionException.

调用者运行策略实现了一种调节机制,既不会抛弃任务,也不会抛出异常,而是将任务回退到调用者。

 

转载于:https://my.oschina.net/459161859/blog/808196

你可能感兴趣的文章
[BZOJ 3211]花神游历各国(并查集+树状数组)
查看>>
Python中给文件加锁
查看>>
4.9Python数据类型(5)列表(新版)
查看>>
软件构造期末复习考点总结
查看>>
7 Django的模板层
查看>>
EF中Json序列化对象时检测到循环引用的解决办法
查看>>
词向量概况
查看>>
css3 画圆记录
查看>>
javascript中级
查看>>
《CLR Via C# 第3版》笔记之(十五) - 接口
查看>>
golang实现ios推送
查看>>
【Linux】linux常用基本命令
查看>>
libsvm使用说明
查看>>
CodeForces 595A Vitaly and Night
查看>>
秒杀读后感2
查看>>
插入排序
查看>>
Session机制详解
查看>>
【转】使用PHP导入和导出CSV文件
查看>>
面向对象概念思想再理解 2.0
查看>>
VS code 格式化插件, 仅需一步, 无须配置
查看>>