文章目录
两种基本的创建线程方式
这两种创建方式的区别
AsyncTask
HandlerThread
IntentService
ThreadPoolExecutor
两种基本的创建线程方式
最基本的创建方式,我们通过实现Runnable接口,或者继承自Thread类,覆写run方法。
继承Thread类,覆写run方法
运行结果:
实现Runnable接口,实现run方法
运行结果
这两种创建方式的区别
这两种创建方式最主要的区别是实现Runnable接口的方式创建,可以给多个Thread用,这样子的话可以共享数据。但是也要注意线程安全问题。
如果使用继承Thread的方式创建,则无法共享数据。
推荐使用实现Runnable实现run方法的方式去创建线程。
AsyncTask
有些同学可以没有听过AsyncTask,现在基本上不使用了,同学们了解一下就行。
AsyncTask是一个轻量级的异步任务执行工具
AsyncTask enables proper and easy use of the UI thread.
第一种创建方式:
运行结果:
AsyncTask的缺点:默认使用串行的线程池执行任务。
也就是说,如果往这个池里创建10AsyncTask任务,有一个一直没结束,比如说阻塞,休眠,那么其他的就无法执行了。
所以我们使用的时候,要把Executor设置为并行的。
第二种创建方式:
直接执行Runnable接口实现类(串行执行)
执行结果:
修改成并行的执行方式
这样子呢,就可以并发地执行了,如果多个任务的话。
这两种创建方式的区别很明显。前者可以知道结果,方便管理和控制。
HandlerThread
HandlerThread适用于轮询场景,通过发送消息的形式执行任务,这也是一个串行的执行方式。
这个用得比较少,一般是主线程的Handler用得比较多。在子线程给主线程发送消息。
比如说我们在子线程请求数据,然后向主线程发送结果。
另外,HandlerThread构造方法,有多个重载方法,还可以传入优先级。不传则为默认优先级。
IntentService
IntentService是个服务,它可以于后台运行。常用于我们需要跨界面获取到后台任务执行进度,比如说我们上传东西,下载东西。
它执行完任务则会结束服务。
执行结果:
ThreadPoolExecutor
线程池的话重复使用线程,减少线程创建和销毁的开销。使用于频繁的,消耗资源相对少的操作。
然后把任务扔到池里执行
其他的线程池请查看文档吧。当然啦,也可以自定义线程池
领取专属 10元无门槛券
私享最新 技术干货