android提供线程池

网友投稿 701 2022-05-30

new Thread的缺点:

每次new Thread新建对象都会影响性能

线程缺乏统一管理,可能出现无限制新建线程,导致相互竞争,及可能占用过多系统资源导致死机或oom

没有定时执行、定期执行、线程中断等功能

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

重用存在的线程,减少对象创建、消亡的开销,性能好

能够有效控制最大并发线程数,提高系统资源的使用率,同时避免过多资源竞争,避免堵塞

提供定时执行、定期执行、单线程、并发数控制等功能

Android的线程池主要有四个:

newSingleThreadExecutor:单线程池,只有一个线程在运行

newCachedThreadPool :回收型线程池,可以重复利用之前创建过的线程,运行线程最大数是Integer.MAX_VALUE

newFixedThreadPool:固定大小的线程池,跟回收型线程池类似,只是可以限制同时运行的线程数量

ScheduledExecutorService:可以实现循环或延迟任务的线程池。

newSingleThreadExecutor

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

newSingleThreadExecutor Demo已上传GitHub

newCachedThreadPool

一个可以根据需要创建新线程的线程池。如果在使用时,线程池中的线程没有空闲的,则创建一个新线程并添加到池中;如果有被使用完又还没被销毁的线程,则复用该线程。线程池中那些超过 60 秒未被使用的线程,将会被终止并从缓存中移除。因此,长时间保持空闲的线程池不会使用任何资源。

这种线程池比较灵活,对于执行很多短期异步任务的程序而言,这些线程池通常可提高程序性能。

newCachedThreadPool Demo已上传GitHub

newFixedThreadPool

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

Demo

ScheduledExecutorService

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

android提供的线程池

ScheduledExecutorService 和 Timer 的区别

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

Demo

Android 任务调度

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Huawei LiteOS简介
下一篇:c++作业3
相关文章