Android开发——线程池

Android开发——线程池,第1张

概述为什么要用线程池新启线程需要新建——执行任务——销毁这个过程,我们准备一批线程放在那,当需要执行任务的时候就可以直接拿到线程来用,节约了新建和销毁的过程,提高效率。线程资源是稀缺而昂贵的,所以我们需要利用线程池统一管理,限制线程数。 创建线程池时各个参数的含义cor

为什么要用线程池

新启线程需要新建——执行任务——销毁这个过程,我们准备一批线程放在那,当需要执行任务的时候就可以直接拿到线程来用,节约了新建和销毁的过程,提高效率。线程资源是稀缺而昂贵的,所以我们需要利用线程池统一管理,限制线程数。

 

创建线程池时各个参数的含义

corepoolsize:线程池的核心线程数maxnumpoolsize:最大线程数keepalivetime:线程空闲存活时间unit:时间单位BlickingQueue:阻塞队列(最好用有界队列)ThreadFactory:对线程池的微调工作RejectedExecutionHandle:拒绝策略

拒绝策略:当阻塞队列满了,且没有空闲的工作线程,如果继续提交任务,必须采取一种策略处理该任务,线程池提供了4种策略

 

AbortPolicy:直接抛出异常,默认策略;CallerRunsPolicy:用调用者所在的线程来执行任务;discardoldestPolicy:丢弃阻塞队列中靠最前的任务,并执行当前任务;discardPolicy:直接丢弃任务;

 

线程池的工作机制

 

1)如果当前运行的线程少于corePoolSize,则创建新线程来执行任务(注意,执行这一步骤需要获取全局锁)。

 

2)如果运行的线程等于或多于corePoolSize,则将任务加入BlockingQueue。

 

3)如果无法将任务加入BlockingQueue(队列已满),则创建新的线程来处理任务。

 

4)如果创建新线程将使当前运行的线程超出maximumPoolSize,任务将被拒绝,并调用RejectedExecutionHandler.rejectedExecution()方法。

 

合理地配置线程池cpu密集型:最大线程数等于cpu核心数+1,减少cpu切换时间,让cpu处于工作状态,提高效率,+1是因为有的任务可能需要从虚拟内存拿数据,会很慢,cpu此时可以去执行别的任务。IO密集型:最大线程数*2,IO时间等待较长,等待时间可以让cpu去执行别的线程任务,提高cpu利用率。混合型:如果cpu与IO时间差不多,则用两个线程池。如果cpu与IO耗时差很大,则用一个线程池就够了。

 

总结

以上是内存溢出为你收集整理的Android开发——线程池全部内容,希望文章能够帮你解决Android开发——线程池所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1058149.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-25
下一篇2022-05-25

发表评论

登录后才能评论

评论列表(0条)

    保存