本帖最后由 高一航 于 2012-12-31 15:06 编辑
结果是:
MyThread:start()
MyThread:run()
我给你添加了注释,比较好理解:- class MyRunnable implements Runnable { //MyRunnable类实现了Runnable接口,因此可以使用多线程技术
- /**
- * @param 黑马程序员
- * @author 高一航
- */
- public void run() { //实现Runnable接口的类 必须复写run方法
- System.out.println("MyThread:run()");
- }
- public void start() {
- System.out.println("MyThread:start()");
- }
- }
- public class TinyTest extends Thread { //测试类集成了Thread类 , 因此也可以使用多线程
- public void run() {
- System.out.println("MyThread:run()");
- }
- public void start() {
- System.out.println("MyThread:start()");
- }
- public static void main(String[] args) {
- TinyTest myThread = new TinyTest();
- MyRunnable myRunnable = new MyRunnable();
- Thread thread = new Thread(myRunnable);
- myThread.start(); //调用了20行的start方法
- thread.start();//Thread的start调用的是第五行的run方法
- }
- }
复制代码 你这是多线程的两种实现方式, 实现Runnable接口相对于继承Thread类来说,有如下显著的好处:
(1)适合多个相同程序代码的线程去处理同一资源的情况,把虚拟CPU(线程)同程序的代码,数据有效的分离,较好地体现了面向对象的设计思想。
(2)可以避免由于Java的单继承特性带来的局限。我们经常碰到这样一种情况,即当我们要将已经继承了某一个类的子类放入多线程中,由于一个类不能同时有两个父类,所以不能用继承Thread类的方式,那么,这个类就只能采用实现Runnable接口的方式了。
(3)有利于程序的健壮性,代码能够被多个线程共享,代码与数据是独立的。当多个线程的执行代码来自同一个类的实例时,即称它们共享相同的代码。多个线程操作相同的数据,与它们的代码无关。当共享访问相同的对象是,即它们共享相同的数据。当线程被构造时,需要的代码和数据通过一个对象作为构造函数实参传递进去,这个对象就是一个实现了Runnable接口的类的实例。 |