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() 丢掉老的任务不会抛出异常。 * */