java threadpool 线程池核心参数

 /**
         * corePoolSize 保留在池中的线程数 即使处于空闲状态 除非设置了allowCoreThreadTimeOut
         *
         * maximumPoolSize *池中允许的最大线程数
         *
         * keepalivueTime 存活时间 如果当前线程大于core的数量
         *          释放空闲的线程 maximumPoolsize-corePoolSize 只要线程空闲大于指定的keepAlivuetime
         * unit:时间单位
         * BlockingQUeue<Runnable> workQueue 阻塞队列 如果任务有很多 就会将目前多的任务放在队列里面
         *      只要有线程空闲,就会去队列里面取出新的任务继续执行
         * threadFactory 线程创建工厂
         * RejectedExecutionHandler 如果队列满了 按照我们指定得拒绝策略拒绝指定任务
         *
         * 工作顺序
         * 1)、线程池创建好 准备好core数量的核心线程,准备接受任务
         * 1.1、core满了 就将在进来的任务放入阻塞队列中 空闲的core就会自己去阻塞队列获取任务执行
         * 1.2、阻塞队列满了 就直接开新线程执行 最大只能开到max指定数量
         * 1.3、max满了就用RejectedExecutionHandler 拒绝任务
         * 1.4、max都执行完成,有很多空闲 指定时间以后keepAlivueTime以后 释放max-core(195)这些线程
         *
         *       new LinkedBlockingQueue<>() 默认是Integer最大值 内存不够
         *
         *       一个线程池 core:7 max:20 queue:50 100并发进来怎么分配
         *       7个会立即得到执行 50个进入队列 再开13个进行执行,剩下的30个就使用拒绝策略
         *       如果不想抛弃还要执行 CallerRunsPolicy 同步方式
         */
        //最原始的方式:
        ThreadPoolExecutor executor = new ThreadPoolExecutor(5,
                200,
                10, TimeUnit.SECONDS,
                new LinkedBlockingDeque<>(100000),
                Executors.defaultThreadFactory(),
                new ThreadPoolExecutor.AbortPolicy());


        //快速创建线程池
          Executors.newCachedThreadPool(); //core是0 所有都可回收
          Executors.newFixedThreadPool(10);//固定大小 core=max 都不可以回收
          Executors.newScheduledThreadPool(10); //定时任务的线程池
          Executors.newSingleThreadExecutor(); //单线程的线程池,后台从队列里面获取任务 挨个执行

 

posted @ 2021-05-25 10:48  蟑螂恶霸的开发笔记  阅读(131)  评论(0编辑  收藏  举报