Android的线程和线程池 --笔记

来源:互联网 发布:js 启动定时器 编辑:程序博客网 时间:2024/06/05 19:27

线程在Android中一个很重要的概念,从用途来说,线程分为主线程和子线程。主线程主要处理和界面相关的事情,而子线程则往往用于执行耗时操作,因此耗时操作必须放在子线程中去执行。除了Thread本身以外,在Android中可以扮演线程角色的还有很多,比如AsyncTask(线程池)和IntentService(线程),同时HandlerThread也是一种特殊的线程。
在操作系统中,线程是操作系统调度的最小单元,同时线程也是一种受限的系统资源,即线程不肯能无限制的产生,并且线程的创建和销毁都会有相应的开销。当系统中存在大量的线程时,系统会通过时间片轮转的方式调度每个线程,因此线程不肯能做到绝对的并行,除非线程数量小于等于CPU的核心数,一般来说这是不肯能的。所以,正确的做法是采用线程池,一个线程池会缓存一定数量的线程,避免因为频繁线程创建和销毁所带来的系统开销。

线程池

线程池的优点
1.重用线程池中的线程,避免因为线程的创建和销毁所带来的性能开销
2.能有效控制线程池的最大并发数,避免大量的线程之间因互相抢占系统资源而导致的阻塞现象。
3.能够对线程进行简单的管理,并提供定时执行以及指定间隔循环执行等功能

ThreadPoolExecutor 线程池的参数
ThreadPoolExecutor是线程池的真正实现,它的构造方法提供了一系列参数来配置线程池。
1.corePoolSize
线程池的核心线程数,默认情况下,核心线程会在线程池一直存活,即使它们处于闲置状态。
2.maximumPoolSize
线程池所能容纳的最大线程数,当活动线程数达到这个数值后,后续的新任务将会被阻塞
3.keepAliveTime
非核心线程闲置时的超时时长,超过这个时长,非核心线程就会被回收
4.unit
用于指定keepAliveTime参数的时间单位
5.workQueue
线程池中的任务队列,通过线程池的execute方法提交的Runable对象会存储在这个参数中。
6.threadFactory
线程工厂,为线程池提供创建新线程的功能。

线程池的分类
1.FixedThreadPool
线程数量固定的线程池,当线程处于空闲状态时,它们并不会被回收,除非线程池被关闭了。
2.CachedThreadPool
线程数量不定的线程池,他只有非核心线程,并且其最大线程数为Integer.MAX_VALUE
3.ScheduledThreadPool
核心线程数量是固定的,非核心线程数是没有限制的,并且当非核心线程闲置时会被立即回收
4.SingleThreadExecutor
这类线程池内部只有一个核心线程,他确保所有的任务都在同一个线程中按顺序执行。

原创粉丝点击