版权声明:转载请注明出处: https://blog.csdn.net/qq_21687635/article/details/84673240
执行流程
处理流程如下:
execute()方法执行示意图如下:
线程池的创建
-
corePoolSize:线程池的基本大小
-
workQueue:用于保存等待执行的任务的阻塞队列
- ArrayBlockingQueue:基于数组结构的有界阻塞队列
- LinkedBlockingQueue:基于链表结构的无界阻塞队列
- SynchronousQueue:无容量的阻塞队列
- PriorityBlockingQueue:具有优先级的无界阻塞队
-
maximumPoolSize:线程池允许创建的最大线程数。
-
ThreadFactory:用于设置创建线程的工厂,可以通过线程工厂给每个创建出来的线程设置更有意义的名字。
-
RejectedExecutionHandler:当队列和线程池都满了,会采取某种策略去执行新的任务。
- AbortPolicy:直接抛出异常
- CallerRunsPolicy:调用者所在的线程运行任务
- DiscardOldestPolicy:丢弃队列里最近的一个任务,并执行当前任务
- DiscardPolicy:不处理,丢弃掉。
-
keepAliveTime:当线程的数量大于corePoolSize时,线程池的工作线程空闲后,保持存活的时间
-
TimeUnit:keepAliveTime的时间单位
提交任务
-
execute()方法用于提交不需要返回值的任务
-
submit()方法用于提交需要返回值的任务
关闭线程池
-
shutdown():停止所有没有正在执行任务的线程
-
shutdownNow():尝试停止所有的正在执行或暂停任务的线程
参考
- Java并发编程的艺术[书籍]