首页 > 编程语言 > 详细

ThreadPoolExecutor-线程池

时间:2021-08-04 19:31:41      阅读:31      评论:0      收藏:0      [点我收藏+]

线程池

三大方法

1、newSingleThreadExecutor:单个线程

2、newFixedThreadPool:固定大小的线程池

3、newCachedThreadPool:可伸缩线程池

七大参数

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:拒绝策略

四种拒绝策略

策略一:new ThreadPoolExecutor.AbortPolicy  线程数超出允许最大处理线程数+等候队列容量时抛出异常
策略二:new ThreadPoolExecutor.CallerRunsPolicy 哪来的回哪去,主线程处理超出的线程
策略三:new ThreadPoolExecutor.DiscardPolicy 队列满了丢掉任务,不抛出异常
策略四:new ThreadPoolExecutor.DiscardOldestPolicy 对了满了,尝试和最早的线程竞争,失败了丢掉任务

 

线程池的好处:

1、降低资源的消耗

2、提高响应的速度

3、方便管理

线程复用,控制最大并发数,管理线程

 

 

例子:

import java.util.concurrent.*;

public class Demo02 {
public static void main(String[] args) throws InterruptedException {
ExecutorService threadPool = new ThreadPoolExecutor(2, 5, 3, TimeUnit.SECONDS,
new LinkedBlockingQueue<>(3), Executors.defaultThreadFactory(),
new ThreadPoolExecutor.DiscardOldestPolicy());
for (int i = 0; i < 9; i++) {
threadPool.execute(()->{
System.out.println(Thread.currentThread().getName() + "办理");
});
}
threadPool.shutdown();
}
}

ThreadPoolExecutor-线程池

原文:https://www.cnblogs.com/gdstcymc/p/15099920.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!