转载注明出处:http://blog.csdn.net/xiaohanluo/article/details/52024590
1. 简介
本篇主要针对AsyncTask中使用到的多线程知识进行讲解,也会涉及到一些基本的多线程知识。在上一篇中大家都知道了AsyncTask内部会起一个非UI线程去执行一些比较耗时的操作,那么这个线程在AsyncTask是怎么样被执行的,仅仅只是实例化一个Thread然后启动它吗?在内部对线程是怎么样处理的?这些都需要从AsyncTask的源代码中才能查看到,在看源代码之前先讲解一下关于AsyncTask内部涉及到的一些多线程知识,方便后面更快速的理解源代码,磨刀不误砍柴工!
2. 线程之Thread&Runnable
说到多线程,通常很快就能想到Thread
类和Runnable
接口,相信大家并不陌生,直接说一下二者的区别吧。
- 类和接口的区别,在java中只能单一的继承,但是可以实现多个接口,所以使用Runnable更灵活
- 使用Runnable可以实现资源共享
- Thread实现了Runnable接口
看起来好像Runnable
非常好用,那么都用它不就行了吗?为什么要需要Thread
呢?是因为Thread
的start()
方法是调用了本地的一个系统方法,来创建一个线程,这个才是实现多线程的根本,而run()
方法只是线程中执行的具体任务,这也是在创建多线程时候,要调用start()
方法而不是直接调用run()
方法的原因。
使用起来也非常简单,看下面代码。因为Runnable仅仅是个接口,并没有start()
方法,所以会依托于Thread。
//Thread使用
new Thread() {