栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

一文详述线程池使用及其底层原理

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

一文详述线程池使用及其底层原理

前沿

线程池对于我们来说很熟悉了,在工作中,通过多线程处理任务,进一步的压榨CPU,提供任务处理处理速度。但是你知道线程池是如何运行的吗?知道他的实现原理吗?这篇文章就告诉你答案

正文 线程池使用

ThreadPoolExecutor 是创建线程池的类,他实现了ExecutorService接口,我们看他参数比较全的构造方法如下

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

各参数是啥意思呢?

corePoolSize :核心线程池数

maximumPoolSize:最大线程池数 

keepAliveTime:保持活跃时间

unit:时间单位

workQueue:阻塞队列

threadFactory:线程池工厂

handler:拒绝策略

各参数作用是啥呢?我们通过下面的例子来说明:

创建一个线程池对象,如下代码块

ExecutorService threadPoolExecutor = new ThreadPoolExecutor(1, 10, 1, TimeUnit.DAYS, new SynchronousQueue()); 

提交任务到线程池,让其处理,我们让其打印一条日志

threadPoolExecutor.execute(new Runnable() {                                                                          @Override 

public void run() {                                                                                            System.out.println("你收拾收拾");                                                                                          }                                                                      });  

1、当线程数小于核心线程数,再来一个任务则将创建一个新的线程来处理

2、当线程数等于核心线程数,则新的任务将添加到阻塞队列

3、当线程数等于核心线程数 并且队列已满,则创建新的线程来处理新的任务

4、当线程数等于最大线程数,并且队列已满,则根据构造函数中配置的拒绝策略来执行对应的操作

拒绝策略

线程池ThreadPollExecutor.java类中提供4个静态内部类作为4种抛弃任务策略方式:

1、AbortPolicy:抛出异常

2、DiscardPolicy:不做任何处理

3、DiscardOldestPolicy:把队列队头的任务(也就是等待了最长时间的)直接扔掉,然后提交这个任务到等待队列中

4、CallerRunsPolicy:如果线程池没shutDown,则由提交任务的线程来执行该任务

5、自己实现拒绝策略,通过实现RejectedExecutionHandler接口

实现原理

我们从execute()方法进行分析

 

 

 下面我们看下start方法

 

 

我们回过头看下getTask()方法

 整个线程池执行原来到这里结束了,其实他的源码并不多,从逻辑上看到看到,他运用了一些while循环来不停的处理从队列里获取任务。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/866646.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号