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();
傷處程序執(zhí)行結(jié)果是什么?
答案:
MyThread: start()
MyRunnable: run()
分析:
(一)MyThread 繼承自 Thread,且覆蓋了start()方法,所以當(dāng)其實例start()時,不會在執(zhí)行run()方法中的代碼。其實這也是個“沒用的線程了”。
所以先打?。篗yThread: start() 。
(二)MyRunnable 實現(xiàn)了Runnable 接口,Runnable 接口就一個run()方法。
Thread thread = new Thread(myRunnable); 這句代碼,根據(jù)Runnable 的實例創(chuàng)建了一個Thread實例,該Thread實例的start方法會執(zhí)行run()方法中的代碼。
所以又打?。篗yRunnable: run()
總結(jié),Runnable 接口,就一個方法 :run() 。本人覺得這個接口僅僅是一種標(biāo)記而已(類似 Serializable),或者為了以后擴展使用。而真正有意義的是它的實現(xiàn):Thread。