校招必会之Java线程池

之所以要使用线程池,本质原因还是线程的创建和销毁太耗资源。

Java线程池主要核心类:

java.util.concurrent.ThreadPoolExecutor。

它的构造函数需要我们重点关注下:

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

每个入参含义如下:

corePoolSize:核心线程数(即使线程空闲,也要保留的线程数)

maximumPoolSize:最大线程数

keepAliveTime & unit:超出corePoolSize的那部分线程,最大保留时间及其时间单位

workQueue:线程队列

threadFactory:线程工厂

handler:线程拒绝策略

这些参数的使用原理参考如下图:

其对应的核心代码逻辑如下:

BlockingQueue阻塞队列:

ArrayBlockingQueue 数组实现的阻塞队列 构造函数需指定队列大小 入队和出队共用一把锁

LinkedBlockingQueue 链表实现的阻塞队列 入队和出队是用不同的锁

SynchronousQueue Each insert operation must wait for a corresponding remove operation by another thread, and vice versa. A synchronous queue does not have any internal capacity, not even a capacity of one.

RejectedExecutionHandler拒绝策略:

AbortPolicy:抛出RejectedExecutionException异常

DiscardPolicy:啥也不做(意味着任务被丢弃了)

DiscardOldestPolicy:获取队列头的一条数据,然后丢掉,将当前任务放入队列

CallerRunsPolicy:由调用者自己去执行这个任务

拼多多校园招聘开始啦!!!!电商岗位!!!!

【拼多多校园招聘】内推链接:https://careers.pinduoduo.com/campus/grad?t=iWhrQ6EgrS,内推码:iWhrQ6EgrS。期待你的加入!我们一起,无拼不青春!(通过此链接投递计入内推,内推简历优先筛选~)

#我的简历长这样##如果校招重来我最想改变的是##软件开发薪资爆料##校园招聘##互联网#
JAVA技术实战 文章被收录于专栏

JAVA从入门到...

全部评论

相关推荐

5 5 评论
分享
牛客网
牛客企业服务