我们向线程提交任务时可以使用 Execute 和 Submit,区别就是 Submit 可以返回一个 Future 对象,通过 Future 对象可以了解任务执行情况,可以取消任务的执行,还可获取执行结果或执行异常。Submit 最终也是通过 Execute 执行的。
△线程池提交任务时的执行顺序如下:
向线程池提交任务时,会首先判断线程池中的线程数是否大于设置的核心线程数,如果不大于,就创建一个核心线程来执行任务。
如果大于核心线程数,就会判断缓冲队列是否满了,如果没有满,则放入队列,等待线程空闲时执行任务。
如果队列已经满了,则判断是否达到了线程池设置的最大线程数,如果没有达到,就创建新线程来执行任务。
如果已经达到了最大线程数,则执行指定的拒绝策略。这里需要注意队列的判断与最大线程数判断的顺序,不要搞反。