ThreadPoolExecutor 线程池参数详解,执行流程
创始人
2024-02-07 00:03:24
0

线程池的使用:

    public static void main(String[] args) {ThreadFactory sThreadFactory = new ThreadFactory() {private final AtomicInteger mCount = new AtomicInteger(1);@Overridepublic Thread newThread(Runnable r) {int andIncrement = mCount.getAndIncrement();return new Thread(r, "Thread # " + andIncrement);}};Runnable runnable = new Runnable() {@Overridepublic void run() {try {Thread.sleep(1000);System.out.println(Thread.currentThread().getName() + "完成任务");} catch (InterruptedException e) {e.printStackTrace();}}};ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(2, 10,200L, TimeUnit.MILLISECONDS, new LinkedBlockingDeque<>(1), sThreadFactory, new ThreadPoolExecutor.DiscardOldestPolicy());for (int i = 0; i < 200; i++) {threadPoolExecutor.execute(runnable);}}

运行后:


ThreadPoolExecutor构造函数详解:

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

 corePoolSize:核心线程数,也就是这个线程池一创建就自带多少个线程

maximumPoolSize:最大线程数,就是这个线程池最多能容纳多少个线程

keepAliveTime:设置线程空闲了多长时间后被回收

unit :第三个参数的时间单位

workQueue:设置加入的任务多过corePoolSize时加入的阻塞队列

threadFactory:线程工厂。一般来说就是给线程改个名

handler:拒绝策略。当加入的任务太多,线程池和阻塞队列都塞满的情况下该怎么办

拒绝策略可选:

ThreadPoolExecutor.AbortPolicy:直接抛出异常

ThreadPoolExecutor.CallerRunsPolicy:让调用线程池的自己执行任务

ThreadPoolExecutor.DiscardOldestPolicy删除老任务,让新任务进来(渣男行为)

ThreadPoolExecutor.DiscardPolicy:删除新任务(中国好男人)


线程池的执行过程:(以我这个例子为例)

创建一个线程池,自带2个线程,最多装10个线程,线程空闲200毫秒才会被回收,阻塞队列就只能放一个任务,当线程池和阻塞队列都满了的情况下抛弃老任务去执行新任务。

在for循环里一下子塞入200个任务,最终结果是执行了11个任务

注:这里的阻塞队列只能放一个任务的原因是,当阻塞队列满了后线程池才会去创建额外的线程,否则阻塞队列还没满的情况下,执行的线程数一直都是2(核心线程数)。这里我设置一个是作为测试使用,一般是不会这么干的

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
客厅放八骏马摆件可以吗(家里摆... 今天给各位分享客厅放八骏马摆件可以吗的知识,其中也会对家里摆八骏马摆件好吗进行解释,如果能碰巧解决你...
美团联名卡审核成功待激活(美团... 今天百科达人给各位分享美团联名卡审核成功待激活的知识,其中也会对美团联名卡审核未通过进行解释,如果能...