android提供的线程池

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值