异步笔记

常用的:

Thread

new Thread(){
@Override
public void run() {
super.run();
// NetWork or DataBase Operation
}
}.start();
//设置进程级别
Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND);
缺点:
创建及销毁线程消耗性能较大;
缺乏统一的管理;
优先级与UI线程一致,抢占资源处于同一起跑线;
匿名内部类默认持有外部类的引用,有内存泄漏的风险;
需要自己处理线程切换。

AysncTask

1.实现多线程
在工作线程中执行任务,如 耗时任务
2.异步通信、消息传递
实现工作线程 & 主线程(UI线程)之间的通信,即:将工作线程的执行结果传递给主线程,从而在主线程中执行相关的UI操作

方便实现异步通信
不需使用 “任务线程(如继承Thread类) + Handler”的复杂组合
节省资源
采用线程池的缓存线程 + 复用线程,避免了频繁创建 & 销毁线程所带来的系统资源开销
onDestroy方法中取消任务
内存泄漏使用静态内部类

HandlerThread

继承了Thread,实际上是一个使用Looper、Handler的线程。
继承了Thread,在run()方法中通过Looper.prepare()来创建消息队列,Looper.loop()来循环处理消息。
使用时开启HandlerThread,创建Handler与HandlerThread的Looper绑定,Handler以消息的方式通知HandlerThread来执行一个具体的任务。
HandlerThread内部维护了一个消息队列,避免多次创建和销毁子线程来进行操作。

IntentService

IntentService是Service与HandlerThread的组合,内部的工作线程以及调度机制都依赖于HandlerThread。
同HandlerThread的优势;
开启服务,进程优先级会提升;
无需手动关闭,执行完之后自动结束。

ThreadPoolExecutor

线程池:基本思想是一种对象池的思想,开辟一块内存空间,里面存放了众多(存活状态)的线程,池中线程执行调度由池管理器来处理。当有线程任务时,从池中取一个,执行完成后线程对象归池,这样可以避免反复创建线程对象所带来的性能开销,节省了系统的资源。
优势:
线程的创建和销毁由线程池维护,一个线程在完成任务后并不会立即销毁,而是由后续的任务复用这个线程,从而减少线程的创建和销毁,节约系统的开销;
线程池旨在线程的复用,这就可以节约我们用以往的方式创建线程和销毁所消耗的时间,减少线程频繁调度的开销,从而节约系统资源,提高系统吞吐量;
在执行大量异步任务时提高了性能;
Java内置的一套ExecutorService线程池相关的api,可以更方便的控制线程的最大并发数、线程的定时任务、单线程的顺序执行等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值