pengjin 2019-12-01
一、 new Thread() VS ThreadPoolExcutor
1. new Thread()的弊端
1) 每次new Thread() 性能差
2)线程缺乏统一管理,可能无限制新建线程,相互之间竞争,及可能占用过多系统资源导致死机或oom
3)缺乏更多功能,如定时执行,定期执行,线程中断
2. ThreadPoolExecutor--线程池,多线程的管理者
引入好处:
1)提升性能
2)防止内存过度消耗,控制活动线程的数量,防止并发线程过多
分类:
1)new CachedThreadPool 创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,如无可回收线程,则新建线程
2)new FixedThreadPool 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待
3)new ScheduledThreadPool 创建一个定长的线程池,支持定时及周期性任务执行
4)new SingleThreadExecutor 创建一个单线程化的线程池,他只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO,LIFO)优先级别执行
3. 拓展:为什么Progress可以在工作线程池中工作
回答:因为progress的setProgress()方法添加了判断,如果不是主线程,使用了post()方法(依旧是依旧handle原理),通过handler将消息发送出去