Java多线程的使用
2015-10-25 03:01
537 查看
Java有两种方式实现多线程。
第一种——继承Thread类,并重写run方法
步骤:
定义类继承Thread类;
重写子类的run方法,将线程需要执行的代码写在run方法中;
创建子类的对象,则创建了线程对象;
调用该对象的start方法,开启线程。
实例:
第二种——实现Runnable接口,用该类的对象构造Thread类
步骤:
定义类实现Runnable接口;
实现接口中的run方法,将线程需要执行的代码写在run方法中;
用接口对象构造一个Thread对象;
调用Thread对象的start方法,开启线程。
实例:
start方法的功能
启动了线程
让jvm调用了Thread类(或子类)对象的run方法
为什么可以有以上两种方式实现多线程?
对于第一种方式很容易理解。由于重写了Thread类的run方法,调用start方法启动线程后,jvm将调用子类重写的run方法;
对于第二种方式,调用start方法启动线程后,jvm将调用Thread类的run方法,其代码如下:
其中target为Thread类的成员变量,类型为Runnable。在用Runnable对象构造Thread时,会使target引用该接口对象,所以执行target.run()时,实际上执行了接口对象的run方法。
第一种——继承Thread类,并重写run方法
步骤:
定义类继承Thread类;
重写子类的run方法,将线程需要执行的代码写在run方法中;
创建子类的对象,则创建了线程对象;
调用该对象的start方法,开启线程。
实例:
public class MyThread extends Thread() { @Override public void run() { // 多线程代码 } // 其他代码 }
Thread t = new MyThread(); t.start();
第二种——实现Runnable接口,用该类的对象构造Thread类
步骤:
定义类实现Runnable接口;
实现接口中的run方法,将线程需要执行的代码写在run方法中;
用接口对象构造一个Thread对象;
调用Thread对象的start方法,开启线程。
实例:
public class MyClass implements Runnable() { public void run() { // 多线程代码 } // 其他代码 }
MyClass m = new MyClass(); Thread t = new Thread(m); t.start();
start方法的功能
启动了线程
让jvm调用了Thread类(或子类)对象的run方法
为什么可以有以上两种方式实现多线程?
对于第一种方式很容易理解。由于重写了Thread类的run方法,调用start方法启动线程后,jvm将调用子类重写的run方法;
对于第二种方式,调用start方法启动线程后,jvm将调用Thread类的run方法,其代码如下:
public void run() { if (target != null) { target.run(); } }
其中target为Thread类的成员变量,类型为Runnable。在用Runnable对象构造Thread时,会使target引用该接口对象,所以执行target.run()时,实际上执行了接口对象的run方法。
相关文章推荐
- eclipse转MyEclipse
- 大四狗:我的java历程(续)
- Java语言基础之多态
- java的接口
- 我遇到的cookie 中文乱码
- Struts2配置文件及相关标签的介绍
- Struts2框架的搭建及配置文件的配置
- Eclipse 安装findbugs插件
- 数据过滤器注解@Filter 如何在hibernate、spring data jpa中调用
- ThinkingInJava_3
- MyBatis整合Spring的实现(2)
- MyBatis整合Spring的实现(3)
- MyBatis整合Spring的实现(4)
- MyBatis整合Spring的实现(5)
- MyBatis整合Spring的实现(6)
- JAVA动态代理的理解
- 深入理解Java内存模型
- java中的抽象类和抽象方法
- Java学习记录:文件的输入输出流
- Java实现从正方教务系统抓取数据(二)--验证码识别