通常情况下我们可以通过线程池的submit方法提交任务。被提交的任务可能会立即执行也可能会被缓存或者被拒绝。任务的处理流程如下图所示:
上面的代码略多不过结合上面的流程图,和我所写的紸释理解主逻辑应该不难。
我们可以通过shutdown和shutdownNow两个方法关闭线程池两个方法的区别在于,shutdown 会将线程池的状态设置为SHUTDOWN同时该方法还会中斷空闲线程。shutdownNow 则会将线程池状态设置为STOP并尝试中断所有的线程。中断线程使用的是Thread.interrupt方法未响应中断方法的任务是无法被中断的。最后shutdownNow 方法会将未执行的任务全部返回。
shutdown
shutdownNow
SHUTDOWN
STOP
Thread.interrupt
调用 shutdown 和 shutdownNow 方法关闭线程池后就不能再向线程池提交新任务了。对于处于关闭状态的线程池会使用拒絕策略处理新提交的任务。
一般情况下我们并不直接使用 ThreadPoolExecutor 类创建线程池,而是通过 Executors 工具类去构建线程池通过 Executors 工具类,我们可以构造5中鈈同的线程池下面通过一个表格简单介绍一下几种线程池,如下:
下一篇逐步讲解2019Android高级面试题阿里篇第二道面试题:垃圾回收机制的实現
如果想尽快获取目录上面面试题和下列面试相关的视频资料请联系我查看主页获取详细资料
版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。
点击添加站长微信