android 多线程 — 线程池线程数配置

2019-04-26  本文已影响0人  前行的乌龟

ps:原谅我没干过后台开发,不了解线程池配置的更多内容,先写这么点


好像要一个呀 ~

在《java虚拟机并发编程》一书中推荐我们使用系统可用的处理器核心数来匹配线程池数量

Runtime.getRuntime().availableProcessors()

常见2种任务:

那么如何区别计算密集型和IO密集型任务呢,这就要提到一个概念: 阻塞系数

阻塞系数 = 阻塞时间 / 总的运行时间,如果任务有 50% 的时间处于阻塞状态,则阻塞系数为0.5

如果任务被阻塞的时间 < 50%,任务就是计算密集型的,所需线程数将随之减少,但最少也不应该低于处理器的核心数。如果任务被阻塞的时间大于执行时间,即该任务是 IO 密集型的,我们就需要创建比处理器核心数大几倍数量的线程

网上有个公式:

线程数 = CPU可用核心数/(1 - 阻塞系数),其中阻塞系数的取值在0和1之间。

我们可以通过扩展线程池进行监控,继承线程池并重写线程池 beforeExecute、afterExecute、terminated方法,我们可以在任务执行前,执行后和线程池关闭前干一些事情。如监控任务的平均执行时间,最大执行时间和最小执行时间等,这几个方法在线程池里是空方法

上一篇 下一篇

猜你喜欢

热点阅读