线程池的理解

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

  

上一篇:线程池


下一篇:线程池的基本内容(2)