class MyThread extends Thread{ public void run(){ System.out.println("MyThread: run()"); } public void start(){ System.out.println("MyThread: start()"); } } class MyRunnable implements Runnable{ public void run(){ System.out.println("MyRunnable: run()"); } public void start(){ System.out.println("MyRunnable: start()"); } } MyThread myThread = new MyThread(); MyRunnable myRunnable = new MyRunnable(); Thread thread = new Thread(myRunnable); myThread.start(); thread.start();
伤处程序执行结果是什么?
答案:
MyThread: start() MyRunnable: run()
分析:
(一)MyThread 继承自 Thread,且覆盖了start()方法,所以当其实例start()时,不会在执行run()方法中的代码。其实这也是个“没用的线程了”。
所以先打印:MyThread: start() 。
(二)MyRunnable 实现了Runnable 接口,Runnable 接口就一个run()方法。
Thread thread = new Thread(myRunnable); 这句代码,根据Runnable 的实例创建了一个Thread实例,该Thread实例的start方法会执行run()方法中的代码。
所以又打印:MyRunnable: run()
总结,Runnable 接口,就一个方法 :run() 。本人觉得这个接口仅仅是一种标记而已(类似 Serializable),或者为了以后扩展使用。而真正有意义的是它的实现:Thread。