您好,登錄后才能下訂單哦!
實現步驟:
(1)創建一個繼承于Thread類的子類
(2)重寫Thread類的run()方法【線程執行的操作聲明在run()中】
(3)創建Thread類的子類的對象
(4)通過此對象調用start()方法【①啟動線程②調用當前線程對象的run方法】
代碼
//(1)創建一個繼承于Thread類的子類
class MyThread1 extends Thread{
public MyThread1(String name){
super(name);
}
//(2)重寫Thread類的run()方法
@Override
public void run() {
System.out.println("第一種創建線程");
}
}
}
public class ThreadTest{
public static void main(String[] args) {
//(3)創建Thread類的子類的對象
MyThread1 t1=new MyThread1();
//(4)通過此對象調用start()方法
t1.start();
}
}
實現步驟
(1)創建一個實現了Runnable接口的類
(2)該實現類 去實現Runnable中的抽象方法run()
(3)創建實現類的對象
(4)將此對象作為參數傳遞到Thread類的構造器中,創建 Thread類的對象
【Thread構造方法源碼:public Thread(Runnable target)】
(5)通過Thread類的對象調用start()
代碼
//1.創建一個實現了Runnable接口的類
class MyThread2 implements Runnable{
@Override
//2.實現類去實現Runnable中的抽象方法run()
public void run() {
System.out.println("第二種創建線程:實現Runnable接口");
}
}
public class ThreadTest1 {
public static void main(String[] args) {
//3.創建實現類的對象
MyThread2 m=new MyThread2();
// 4.將此對象作為參數傳遞到Thread類的構造器中,創建Thread類的對象
Thread thread = new Thread(m);
// 5.通過Thread類的對象調用start()
thread.start();
在前邊說過start()方法的作用:
(1)啟動線程
(2)調用當前線程的run()方法
那么問題來了:為什么在使用Runnable接口創建線程的方法中,明明是Thread類的對象調用的start(),為什么最終會是實現Runnable接口的類的run()方法被執行,而不是Thread類的run()方法被執行?
原因下次再說,要去上課了
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
呼·······,我回來啦!
(1)首先來看一下Thread類的run()方法的源碼:
說明:如果target非空,就執行target的run()方法,那么target又是什么?
(2)再來看一下Thread的一個構造方法Thread(Runnable target)
我們發現target是一個Runnable類型的變量,該變量會作為參數傳入Thread類的構造器中。
說明:target就是實現了Runnable接口的實現類的實例對象。
因為該對象非空,所以Thread的對象在調用了自身的run()方法,然后發現target對象非空,因此轉而執行了實現類的run()方法。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。