专栏名称: Anlia
Android工程师
目录
相关文章推荐
开发者全社区  ·  吃瓜!华x公司渣男天花板 ·  21 小时前  
开发者全社区  ·  兄弟的心真不是一般的大啊,还在拍呢,格局小了 ·  21 小时前  
开发者全社区  ·  京东太猛了,全体算法岗喜提 30% 普调涨薪 ·  23 小时前  
开发者全社区  ·  大瓜!顶流男星 ·  昨天  
开发者全社区  ·  顶流男星大瓜? ·  2 天前  
51好读  ›  专栏  ›  Anlia

大话Android多线程(一) Thread和Runnable的联系和区别

Anlia  · 掘金  · android  · 2018-01-29 02:30

正文

版权声明:本文为博主原创文章,未经博主允许不得转载
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();







请到「今天看啥」查看全文


推荐文章
开发者全社区  ·  吃瓜!华x公司渣男天花板
21 小时前
开发者全社区  ·  京东太猛了,全体算法岗喜提 30% 普调涨薪
23 小时前
开发者全社区  ·  大瓜!顶流男星
昨天
开发者全社区  ·  顶流男星大瓜?
2 天前
21金融圈  ·  恭喜华为!今天,正式杀入美国!
8 年前