校招必会之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从入门到...