多线程_Thread类简介及创建线程的两种方式
来源:互联网 发布:七灯军团戒指淘宝 编辑:程序博客网 时间:2024/05/21 07:44
一、Thread类简介
1、 创建线程,即创建Thread类或者Thread子类的实例,jvm就会调用这个实例的run方法,而我们要实现的功能也就写在这run方法里面。Thread类中简略的源码是:
public void run() { if (target !=null){ target.run(); } } private Runnable target; public Thread(Runnable target) { init(null, target, "Thread-" + nextThreadNum(), 0); } private void init(ThreadGroup g, Runnable target, String name, long stackSize) { ....... this.target = target; .... }
2、从代码可以看出:
当Thread类实例被调用run方法时,首先判断该实例的Runnable字段target
是否存在,如果存在,就调用target的run方法,否则run方法结束。从这里面,我发现有两个地方可以放我们的需求代码,一个是Thread类的run方法里面,另一个是target字段的run方法里面。从这里,也就形成了两种创建线程的方式了。
二、两种创建线程的方式;
1、创建Thread子类对象,覆盖run方法:当jvm调用该对象的run方法是,即调用了我们的需求代码。
示例:
Thread thread= new Thread() {@Overridepublic void run() { //这里写我们的需求代码,覆盖Thread类的run方法}};
2、通过Runnable实例构造Thread对象:当Thread对象run方法被调用时,会再调用Runnable的run方法里面的代码。
示例:
Thread thread2 = new Thread(new Runnable() {@Overridepublic void run() {//这里写我们的需求代码,实现Runnable接口run方法}});
3、总结:
1)不管代码形式怎么样,都是基于①覆盖Thread类run方法或者②用Runnable实例构造Thread对象。要说原因,就Thread类的这几句代码
public void run() { if (target !=null){ target.run(); } }
导致有这两种写线程的方法。
2)推荐使用的是通过Runnable实例构造线程。因为这种方式可以分离线程和我们的需求代码,Thread用来封装线程相关信息,而Runnable实例则可以封装我们的需求代码,然后再将Runnable实例传给Thread,让之替我们运行。如果非要说出什么大道理来,那么前者是继承,而后者是组合。
3)因为Thread类实现了Runnable接口,所以在以Runnable实例构造Thread时,用Thread子类实例也可以,不过就有点多此一举了,本来只需要传一个run方法进来,你却非要传更多额外的东西,这不浪费了?
3)要想了解Thread类的更多功能,还是需要多看Thread类源码。
- 多线程_Thread类简介及创建线程的两种方式
- 【JAVA多线程】-线程的两种创建方式及比较
- 多线程 创建线程的两种方式
- java多线程简介及线程创建方式
- 多线程:初识线程,以及创建线程的两种方式
- java多线程总结一:线程的两种创建方式及优劣比较
- java多线程总结一:线程的两种创建方式及优劣比较
- java多线程总结一: 线程的两种创建方式及优劣比较
- java多线程总结一: 线程的两种创建方式及优劣比较
- java多线程总结一:线程的两种创建方式及优劣比较
- java多线程总结一:线程的两种创建方式及优劣比较
- java多线程总结一: 线程的两种创建方式及优劣比较
- java多线程总结一:线程的两种创建方式及优劣比较
- java多线程总结一:线程的两种创建方式及优劣比较
- java多线程总结一:线程的两种创建方式及优劣比较
- java多线程总结:线程的两种创建方式及优劣比较
- java多线程总结一:线程的两种创建方式及比较
- 多线程的安全问题。 创建线程的两种方式区别
- DirectX 11 SDK文档(八)
- 动态数组实现循环队列
- DetachedCriteria离线查询 org.hibernate.criterion.DetachedCriteria; org.hibernate.criterion.Restrictions;
- OneNote——随心所欲记事本
- iFix软件介绍
- 多线程_Thread类简介及创建线程的两种方式
- C语言深度解析笔记2:操作符
- InTouch软件介绍
- 基于单链表的链队列
- Civil War "开启时代杯"湘潭市第二届大学生程序设计大赛 优先队列多条件判断
- FTP服务器的那些事(一)——用win7自带的IIS建立FTP服务站点
- 《Red5 用户参考手册》之七:入门第六章 发布 Red5 和 入门第七章 Red5 的系统要求
- GetExitCodeThread(hThread, (PDWORD) &uSum);
- 《小米手机与泛泰A820L的分区结构对比分析-外加eMMC介绍》