关于线程池:ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime,TimeUnit unit,BlockingQueue<Runnable> workQueue,ThreadFactory threadFactory,RejectedExecutionHandler handler);
1.当线程数小于核心线程数(corePoolSize)时,创建线程;
2.当线程数大于核心线程数,且任务队列未满时,将任务放入任务队列Queue;
3.当线程数大于核心线程数,且任务队列已满,则分两组情况:
<1>.若线程数小于最大线程数(maximumPoolSize),则创建线程;
<2>.若线程数等于最大线程数,则根据策略处理任务(抛出异常、拒绝任务、主线程执行)。
参数:
1.corePoolSize:核心线程数,内的线程执行完成后不会销毁线程,进入缓存队列等待再次被运行;
2.maximumPoolSize: 最大线程数;
3.keepAliveTime:非核心线程能够空闲的最大时间,超过时间,线程终止;unit:时间单位;
4.workQueue: 缓存队列,存放等待被执行的任务;
5.threadFactory: 线程工程,用了创建线程,一般有3中策略:ArrayBloackingQueue||LinkedBlockingQueue||SynchronousQueue;
5.handler:拒绝处理策略,线程梳理大于最大线程数就会采用拒绝处理策略:
ThreadPoolExecutor.AbortPolicy:丢弃任务并抛出异常;
DiscardPolicy:只丢弃任务;
DiscardOldestPolicy:丢弃队列最前面的任务,再重新尝试执行任务;
CallerRunsPolicy:由调用线程处理该任务。
ThreadPoolExecutor关闭线程池方法:shutdown,submit;后者有返回结果。
线程数状态:RUNNING、SHUTDOWN、stop、terminated;