private static final ExecutorService ANDROID_CHANNEL_THREAD_POOL =
new ThreadPoolExecutor(50/*corePoolSize:核心线程数*/, 100/*maxPoolSize:最大线程数*/, 2000/*keepAliveTime:线程空闲时间*/, TimeUnit.SECONDS, new LinkedBlockingQueue<>(1000/*任务队列大小*/));
corePoolSize、maxPoolSize 的设置要和系统的CPU核数相关.
核心线程的数量,线程池初始化后,每接到一个任务就会创建一个线程来执行任务,直到当前的线程数目到达corePoolSize,此时新的任务将会进入queue中,只有当queue满了之后,maximunPoolSize才发挥作用
线程池的queue满了之后,如果还有新的任务到来,此时如果线程数目小于maximumPoolSize,则会新建线程来执行任务。
拒绝策略:当线程数=maximumPoolSize 且 queue已满 这时候新提交的任务会被拒绝
1.AbortPolicy:直接抛出异常,默认策略; 2.CallerRunsPolicy:用调用者所在的线程来执行任务; 3.DiscardOldestPolicy:丢弃阻塞队列中靠最前的任务,并执行当前任务; 4.DiscardPolicy:直接丢弃任务;