线程池的创建及参数

    public ThreadPoolExecutor(int corePoolSize,
                              int maximumPoolSize,
                              long keepAliveTime,
                              TimeUnit unit,
                              BlockingQueue<Runnable> workQueue,
                              ThreadFactory threadFactory,
                              RejectedExecutionHandler handler) 
        /**
        * 七大参数:corePoolSize:[5]核心线程数【一直存在除非(allowCoreThreadTimeOut)】;线程池创建好后就准备
        * maximumPoolSize:[200]最大线程数量;控制资源
		* keepAliveTime:存货时间。如果当前的线程数量大于core数量。释放空闲的线程。只要线程空闲时间大于指定的keepAliveTime
		* unit:时间单位
		* BlockingQueue<Runnable> workQueue:阻塞队列。如果任务有很多,jiu会将目前多的任务放在队列里面。
		* 只要有线程空闲,就会去队列里面取出新的任务继续执行。
		* threadFactory:线程的创建工厂。
		* handler:如果队列满了,按照指定的拒绝策略拒绝执行任务
		* 
		* 工作顺序:
		* 1)线程池创建,准备好core数量的核心线程,准备接受任务
		* 1.1)core满了,就将再进来的任务放入阻塞队列中。空闲的core就会自己去阻塞队列获取任务执行
		* 1.2)阻塞队列满了,就直接开新线程执行,最大只能开到max指定的数量
		* 1.3)max都满了,就会根据指定的拒绝策略拒绝任务
		* 1.4)若max都执行完成,有很多空闲,在指定的存活时间以后,释放max-core这些线程
		* 
		* new LinkedBlockingQueue<>()默认是Integer的最大值,可能会导致内存不够
		* 
		* 
		* 例子:一个线程池 core 7; max 20, queue: 50 ,100并发进来怎么分配的;
		* 答:7个立即执行,50个进入队列,新开13个线程,执行13个请求,剩下30个根据拒绝策略拒绝掉,
		* 如果不想抛弃,想要执行。使用CallerRunsPolicy;
		
        */
posted @ 2022-01-07 09:47  阿伦啊  阅读(224)  评论(0编辑  收藏  举报