Java线程池的工作原理

一、什么是线程池

线程池是一种池化思想的体现,经常出现在多线程程序中。使用多线程技术,主要几个优势:降低资源的开销、提高系统运行速度、对线程可管理性、提供更加强大的功能。

二、如何使用线程池

1、ThreadPoolExecutor通用构造函数参数解释
public ThreadPoolExecutor(int corePoolSize,
                              int maximumPoolSize,
                              long keepAliveTime,
                              TimeUnit unit,
                              BlockingQueue<Runnable> workQueue,
                              ThreadFactory threadFactory,
                              RejectedExecutionHandler handler) {...}

1、corePoolSize

核心线程数,线程池的基本大小;

2、maximumPoolSize

线程池的最大线程数;

3、keepAliveTime

存活时间,线程的空闲时间超出了存活时间,该线程将会被回收;

4、unit

线程的存活时间单位;

5、workQueue

阻塞队列,用于存放执行的任务。主要有有界队列、无界队列、同步移交;

6、threadFactory

线程工厂,给线程定义名称,方便排查问题

7、handler

拒绝策略,有以下几种:

CallerRunsPolicy,有调用线程处理该任务;
AbortPolicy,丢弃任务并抛出RejectedExecutionException异常,默认策略;
DiscardPolicy,直接抛弃无异常;
DiscardOldestPolicy,抛弃下一个将会被执行的任务,然后重新提交任务;

2、ThreadPoolExecutor运行机制

运行流程如下图:
在这里插入图片描述

三、其他线程池的创建方式(不推荐)

通过Executors直接创建线程,例如:

1、Executors.newCachedThreadPool();

创建可缓存的线程池,线程池大小不受限制,容易引起oom。

2、Executors.newFixedThreadPool();

创建固定大小的线程池,使用的是无界队列,容易引起oom。

3、Executors.newScheduledThreadPool();

创建固定大小的线程池,以延迟或定时的方式执行。线程池大小不受限制,容易引起oom。

4、Executors.newSingleThreadExecutor();

创建一个线程的线程池,使用的是无界队列,容易引起oom。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值