Java线程池
好处
降低资源消耗 |
---|
提高响应速度 |
提高线程的可管理性 |
线程池7大参数
核心参数 | 含义 |
---|---|
corePoolSize | 线程池维护的一个最小线程数量,即使他们是空闲状态也不会销 |
maximumPoolSize | 线程数达到corePoolSize时,会将新的任务缓存到任务队列中,任务队列也满的情况下,就会创建新的线程,直到达到maximunPoolSize。 |
keepAliveTime | 是指超过corePoolSize的这些线程,空闲一段时间后会被销毁掉,keepAliveTime就是这个等待的时间。 |
unit 时间单位 | 即keepAliveTime的时间单位。 |
workQueue 工作队列 | 新任务被提交后,会先进入到此工作队列中,任务调度时再从队列中取出任务。可以设定不同的队列类型及队列的长度。 |
threadFactory 线程工厂 | 用了创建新的线程,可以设置线程名等等。 |
handler 拒绝策略 | 当工作队列的任务达到最大数量,并且线程数达到最大数量,这时新任务进来需要执行的拒绝策略。 |
线程池大小估计
CPU密集型任务 | I/O密集型 |
---|---|
N(cpu)+1 | 2N(cpu) |
jdk中提供了4中拒绝策略:
①CallerRunsPolicy
该策略下,在调用者线程中直接执行被拒绝任务的run方法,除非线程池已经shutdown,则直接抛弃任务。
②AbortPolicy
该策略下,直接丢弃任务,并抛出RejectedExecutionException异常。
③DiscardPolicy
该策略下,直接丢弃任务,什么都不做。
④DiscardOldestPolicy
该策略下,抛弃进入队列最早的那个任务,然后尝试把这次拒绝的任务放入队列