1、线程池的好处
程池的好处 :线程复用、可以控制最大并发数、管理线程
2、线程池的三大方法
/**
*
*
*
* 线程池三大方法
* 1、 Executors.newSingleThreadExecutor()
* 2、Executors.newFixedThreadPool(5)
* 3、Executors.newCachedThreadPool(); 固定和单一线程池不同的是,如果任务多 线程池里面的线程就多,任务少线程池里面的线程就少。
*
*
*/
3、线程池的7大参数
/**
*
* 7大参数
*
* 去银行办业务 共 5个窗口 平时 都是开 2个窗口 ,候客区有 5个座位。
* 有一天人特别多
* 多到候客区 满了,另外的三个窗口也打开来处理啊候客区的人。人继续增多到5个窗口 和候客区都满了,这时候就要开启拒绝策略了。
* 候客区就是阻塞队列。
*
* 如果队列满了,窗口满了 就抛出异常(其中的一个策略)
*
* 最多可以承载的数量
* 队列+max
*
*
*/
public class ZdyPool {
public static void main(String[] args) throws Exception{
ThreadPoolExecutor excutors = new ThreadPoolExecutor(
6,
20,
1000, //超时等待的时间,就是345 中的窗口 这段时间没有人办理业务就要关闭,释放线程了。
TimeUnit.SECONDS,
new LinkedBlockingQueue(3),
Executors.defaultThreadFactory(),
new ThreadPoolExecutor.DiscardOldestPolicy());//其中的一个拒绝策略,
try{
for (int i = 0; i < 94; i++) {
excutors.execute(()->{
System.out.println(Thread.currentThread().getName()+"======ok");
});
}
}catch (Exception e){
e.printStackTrace();
}finally {
excutors.shutdown();
}
}
}
4、线程池的4种拒绝策略
/**
*
* 4种拒绝策略 如果队列满了,窗口满了 就执行拒绝策略
* 1、new ThreadPoolExecutor.AbortPolicy() 抛出异常
* 2、new ThreadPoolExecutor.CallerRunsPolicy() 哪里来的回哪里去,这里测试结果是main 线程来执行。执行结果 如下main======ok
* 3、new ThreadPoolExecutor.DiscardPolicy() 丢掉任务,不会抛出异常
* 4、new ThreadPoolExecutor.DiscardOldestPolicy() 丢掉老的任务不会抛出异常。
*
*/