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();
而小R的业务流程则是这样的(实现Runnable接口,重写Runnable的run()方法)
public class TicketRunnable implements Runnable {
private int ticket = 5;
public void run() {
for (int i = 0; i < 5; i++) {
if (ticket > 0) {
Log.e(“R公司”,Thread.currentThread().getName() + “卖了一张票,编号为r” + (ticket–));
}
}
}
}
业务员同样很快就把票卖完了(创建Thread子类的实例,将实现了Runnable接口的对象作为参数实例化Thread对象,调用start()方法启动线程)
TicketRunnable runnable = new TicketRunnable();
Thread r1 = new Thread(runnable, “1号业务员”);
建议
当我们出去找工作,或者准备找工作的时候,我们一定要想,我面试的目标是什么,我自己的技术栈有哪些,近期能掌握的有哪些,我的哪些短板 ,列出来,有计划的去完成,别看前两天掘金一些大佬在驳来驳去 ,他们的观点是他们的,不要因为他们的观点,膨胀了自己,影响自己的学习节奏。基础很大程度决定你自己技术层次的厚度,你再熟练框架也好,也会比你便宜的,性价比高的替代,很现实的问题但也要有危机意识,当我们年级大了,有哪些亮点,与比我们经历更旺盛的年轻小工程师,竞争。
-
无论你现在水平怎么样一定要 持续学习 没有鸡汤,别人看起来的毫不费力,其实费了很大力,这四个字就是我的建议!!!!!!!!!
-
准备想说怎么样写简历,想象算了,我觉得,技术就是你最好的简历
-
我希望每一个努力生活的it工程师,都会得到自己想要的,因为我们很辛苦,我们应得的。
-
有什么问题想交流,欢迎给我私信,欢迎评论
【附】相关架构及资料
内含往期Android高级架构资料、源码、笔记、视频。高级UI、性能优化、架构师课程、NDK、混合式开发(ReactNative+Weex)微信小程序、Flutter全方面的Android进阶实践技术
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**