android提供的线程池

举报
yd_221104950 发表于 2020/12/03 23:35:08 2020/12/03
【摘要】 new Thread的缺点: 每次new Thread新建对象都会影响性能线程缺乏统一管理,可能出现无限制新建线程,导致相互竞争,及可能占用过多系统资源导致死机或oom没有定时执行、定期执行、线程中断等功能 相比new Thread,Java提供的四种线程池的优点: 重用存在的线程,减少对象创建、消亡的开销,性能好能够有效控制最大并发线程数,提高系统资源的使用率,...

new Thread的缺点:

  • 每次new Thread新建对象都会影响性能
  • 线程缺乏统一管理,可能出现无限制新建线程,导致相互竞争,及可能占用过多系统资源导致死机或oom
  • 没有定时执行、定期执行、线程中断等功能

相比new Thread,Java提供的四种线程池的优点:

  • 重用存在的线程,减少对象创建、消亡的开销,性能好
  • 能够有效控制最大并发线程数,提高系统资源的使用率,同时避免过多资源竞争,避免堵塞
  • 提供定时执行、定期执行、单线程、并发数控制等功能

android的线程池主要有四个:

  1. newSingleThreadExecutor:单线程池,只有一个线程在运行
  2. newCachedThreadPool :回收型线程池,可以重复利用之前创建过的线程,运行线程最大数是Integer.MAX_VALUE
  3. newFixedThreadPool:固定大小的线程池,跟回收型线程池类似,只是可以限制同时运行的线程数量
  4. ScheduledExecutorService:可以实现循环或延迟任务的线程池。

newSingleThreadExecutor

newSingleThreadExecutor是用来创建一个单线程的线程池,这种情况下只有一个线程在工作。如果这个线程由于各种原因结束,则会创建一个新的线程来代替它。当任务提交时会按顺序插入任务队列,执行时从队列头部取出任务执行,保证了所有任务的执行顺序按照提交顺序来执行
newSingleThreadExecutor Demo已上传GitHub

newCachedThreadPool

一个可以根据需要创建新线程的线程池。如果在使用时,线程池中的线程没有空闲的,则创建一个新线程并添加到池中;如果有被使用完又还没被销毁的线程,则复用该线程。线程池中那些超过 60 秒未被使用的线程,将会被终止并从缓存中移除。因此,长时间保持空闲的线程池不会使用任何资源。
这种线程池比较灵活,对于执行很多短期异步任务的程序而言,这些线程池通常可提高程序性能
newCachedThreadPool Demo已上传GitHub

newFixedThreadPool

创建一个固定数量nThreads的线程池。线程池中的线程操作同一个共享的无界队列。在任意时刻,最多只有nThreads个线程在同时执行,如果此时,有新的任务提交到无界队列中,那么它只有等待,直到线程池中有一个线程可用为止。如果线程池的任何线程由于在执行期间失败而被终止了,此时,如果有新的任务在无界队列中,那么它就会创建一个新的线程来取代被关闭了线程,但线程总数不超过nThreads。线程池中的线程不会自动关闭,需要我们主动去关闭它们。

Demo

ScheduledExecutorService

最大优点除了线程池的特性以外,还可以实现循环或延迟任务。

ScheduledExecutorService 和 Timer 的区别

Timer的内部只有一个线程,如果有多个任务的话就会顺序执行,这样我们的延迟时间和循环时间就会出现问题。ScheduledExecutorService是线程池,所以就不会出现这个情况,在对延迟任务和循环任务要求严格的时候,就需要考虑ScheduledExecutorService了。
Demo

文章来源: blog.csdn.net,作者:WongKyunban,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/weixin_40763897/article/details/99977538

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。