/*最小存活线程数*/
int corePoolSize = 10;
/*最大存活线程数*/
int maximumPoolSize = 50;
/*线程最大空闲时间*/
long keepAliveTime = 6000;
/*毫秒*/
TimeUnit unit = TimeUnit.MILLISECONDS;
/*秒*/
TimeUnit unit1 = TimeUnit.SECONDS;
/*基于双链表实现的阻塞队列*/
BlockingQueue<Runnable> workQueue = new LinkedBlockingDeque<Runnable>();
/*基于数组实现的阻塞队列*/
BlockingQueue<Runnable> workQueue1 = new ArrayBlockingQueue<Runnable>(100);
/*基于单链表实现的阻塞队列*/
BlockingQueue<Runnable> workQueue2 = new LinkedBlockingQueue<>();
/*线程创建工厂*/
ThreadFactory defaultThreadFactory = Executors.defaultThreadFactory();
ThreadFactory privilegedThreadFactory = Executors.privilegedThreadFactory();
/*拒绝执行策略*/
/*丢弃任务抛出RejectedExecutionException异常*/
RejectedExecutionHandler abortPolicy = new ThreadPoolExecutor.AbortPolicy();
/*由调用线程处理该任务*/
RejectedExecutionHandler callerRunsPolicy = new ThreadPoolExecutor.CallerRunsPolicy();
/*丢弃队列头部的任务,重新尝试执行任务*/
RejectedExecutionHandler discardOldestPolicy = new ThreadPoolExecutor.DiscardOldestPolicy();
/*丢弃任务,不抛异常*/
RejectedExecutionHandler discardPolicy = new ThreadPoolExecutor.DiscardPolicy();
/*
* 线程池的执行过程:
* 1.当前存活线程数小于最小存活线程数时,创建新的线程执行任务。
* 2.当前存活线程数大于等于最小存活线程数时,且任务队列未满时,将任务放入等待队列。
* 3.当前存活线程数大于等于最小存活线程数时,且任务队列已满时:
* (1)如果存活线程数小于最大存活线程数,创建新的线程执行任务。
* (2)如果存活线程数等于或者大于最大存活线程数,则根据拒绝策略进行处理。
* */
/*
* 如何正确合理的设置线程池的参数:
* 根据三个条件来计算:
* 1.每秒处理的任务数
* 2.每个任务处理花费的时间
* 3.系统允许容忍的最大响应时间
*
* */
/*
* 最大线程数 = 每秒最大任务数*每个任务平均执行时间;
* 最小线程数 = ((每秒最大任务数+每秒最小任务数)/2)*每个任务平均执行时间;
* 队列容量 = 最大线程数-最小线程数;
* 考虑能容忍的最大处理时间
* 队列容量 = (最大线程数-最小线程数)*(能容忍的最大处理时间/每个任务的平均处理时间)
*
* */
java线程池ThreadPoolExecutor
最新推荐文章于 2024-08-10 23:48:18 发布