一、定義線程
1、擴展java.lang.Thread類。
此類中有個run()方法,應該注意其用法:
public void run(){}
如果該線程是使用獨立的Runnable運行對象構造的,則調用該Runnable對象的run方法;否則,該方法不執行任何操作並返回。
Thread的子類應該重寫該方法。
public MyThread extends Thread(){
}
2、實現java.lang.Runnable接口。
void run()
使用實現接口Runnable的對象創建一個線程時,啓動該線程將導致在獨立執行的線程中調用對象的run方法。
二、實例化線程
1、如果是擴展java.lang.Thread類的線程,則直接new即可。
2、如果是實現了java.lang.Runnable接口的類,則用Thread的構造方法:
Thread(Runnable target)
Thread(Runnable target, String name)
Thread(ThreadGroup group, Runnable target)
Thread(ThreadGroup group, Runnable target, String name)
Thread(ThreadGroup group, Runnable target, String name, long stackSize)
三、啓動線程
在線程的Thread對象上調用start()方法,而不是run()或者別的方法。
如果直接調用了run()方法,那麼所謂的線程也就是一個方法調用,不存在線程了
在調用start()方法之前:線程處於新狀態中,新狀態指有一個Thread對象,但還沒有一個真正的線程。
在調用start()方法之後:發生了一系列複雜的事情
啓動新的執行線程(具有新的調用棧);
該線程從新狀態轉移到可運行狀態;
當該線程獲得機會執行時,其目標run()方法將運行。
注意:對Java來說,run()方法沒有任何特別之處。像main()方法一樣,它只是新線程知道調用的方法名稱(和簽名)。因此,在Runnable上或者Thread上調用run方法是合法的。但並不啓動新的線程。