正文
版权声明:本文为博主原创文章,未经博主允许不得转载
Github:
github.com/AnliaLee
大家要是看到有错误的地方或者有啥好的建议,欢迎留言评论
前言
这是
Android多线程
篇的第一章,我们就从线程的创建聊起吧。常用的线程创建方式有两种(实现
Callable
接口的方式,我们放到以后介绍
Executor
框架的时候再叙)
-
继承
Thread
类,重写
Thread
的
run
()方法
-
实现
Runnable
接口,重写
Runnable
的
run
()方法,并将其作为参数实例化
Thread
我们本章的主题正是通过
比对上述两种方式创建的线程在执行任务时的差别
,来理解
Thread
和
Runnable
的联系和区别
先说结论:
-
两者的联系
1、
Thread
类实现了
Runnable
接口
2、都需要重写里面
run
()方法
-
两者的区别
1、实现
Runnable
的类更具有健壮性,避免了单继承的局限
2、
Runnable
更容易实现资源共享,能多个线程同时处理一个资源
Thread和Runnable的比较
我们就以经典的卖票系统讲个故事吧。话说有小T(
Thread
)和小R(
Runnable
)两个票贩子,手下各有两个业务员,平常就干着倒卖活动门票的活(线程执行任务)。有一天,他们各拿到了5张某演唱会的门票,两人将售票的任务交给手下的业务员
小T这边的业务是这样运转的(定义
Thread
类的子类,重写
run
()方法,
run
()方法即为卖票任务)
public class TicketThread extends Thread {
private int ticket = 5;
private String name;
public TicketThread(String name) {
this.name = name;
}
public void run() {
for (int i = 0; i < 5; i++) {
if (ticket > 0) {
Log.e("T公司",name + "卖了一张票,编号为t" + (ticket--));
}
}
}
}
业务员一大早就开始卖票,很快就卖完了(实例化
Thread
的子类,调用
start
()方法启动该线程)
TicketThread t1 = new TicketThread("1号业务员");
TicketThread t2 = new TicketThread("2号业务员");
t1.start();
t2.start();