多线程的应用在Android开发中是非常常见的,常用方法主要有:
1、继承Thread类
2、实现Runnable接口
3、Handler
4、HandlerThread
5、AsyncTask
先直接上结论:
Runnable可以实现资源的共享,同时处理同一资源(new thread中的参数都是同一个runnable)。
Thread类的线程间都是独立运行的,资源不共享(但是如果创建方式和runnable一样则可以实现资源共享,区别主要在于new thread中是否有参数)。
见https://www.jianshu.com/p/333ce4b3d5b8
HandlerThread是线程中的looper已经google给创建好了,可以直接使用looper来创建handler来使用。
AsyncTask一般写在主线程中,可以直接调用主线程中的变量,不需要handler等进行传输。
Thread和Runnable的比较:
啥都先不说,运行两段程序看看结果再分析
实现Runnable接口的程序代码
public class ThreadTest1 implements Runnable {
private int num = 10;
@Override
public void run() {
for (int i = 0; i <= 100; i++) {
if (num > 0) {
System.out.println(Thread.currentThread().getName()+"执行结果:" + (num--));
}
}
}
public static void main(String[] args) {
ThreadTest1 t1 = new ThreadTest1();
Thread t01 = new Thread(t1, "线程1");
Thread t02 = new Thread(t1, "线程2");
Thread t03 = new Thread(t1, "线程3");
t01.start();
t02.start();
t03.start();
}
}
运行结果:
线程2执行结果:9
线程3执行结果:8
线程3执行结果:6
线程1执行结果:10
线程3执行结果:5
线程2执行结果:7
线程3执行结果:3
线程3执行结果:1
线程1执行结果:4
线程2执行结果:2
继承Thread类的实现代码
public class ThreadTest2 extends Thread{
private int num = 10;
@Override
public void run() {
for(int i =0; i <=