定義線程有兩種方法,一種是繼承Thread類,一種是實現(xiàn)Runnable接口,這兩種方法存在各自的優(yōu)缺點。和定義線程對應(yīng)的就是創(chuàng)建線程對象,也有兩種方法。下面給大家介紹一下這兩種方法來定義線程及相對應(yīng)的創(chuàng)建線程對象的方法。
1.繼承Thread類定義線程
定義一個線程可以通過繼承Thread類來實現(xiàn),這是一種相對簡單的定義線程的方法。在Thread類中有一個run方法,在定義的線程中需要重寫這個方法。在重寫run方法中可以定義該線程要執(zhí)行的語句。當(dāng)線程啟動時,run方法中的程序就成為一條獨立的執(zhí)行線程。示例代碼如下:
public class XianCheng extends Thread
{
public void run()
{
System.out.println("run方法執(zhí)行");
}
}
改程序是無法執(zhí)行的,因為沒有main方法,也就是沒有啟動線程的方法。下面先介紹如何創(chuàng)建線程對象。代碼如下:
XianCheng xc = new XianCheng();
從上面的代碼可以看出,創(chuàng)建線程對象的方法和創(chuàng)建普通對象的方法是一樣的。但是這只是對于使用繼承Thread類創(chuàng)建線程的方法來說的。我們也可以通過Thread類來定義線程對象,如
Thread th = new Thread();
2.實現(xiàn)Runnable接口定義線程
在Runnable接口中具有一個抽象的run方法,在實現(xiàn)Runnable接口時,需要實現(xiàn)run方法。示例代碼如下:
public class test2 implements Runnable{
public void run(){
System.out.println("run方法執(zhí)行");
}
}
在使用實現(xiàn)Runnable接口定義的線程中,要比上面復(fù)雜些,因為直接創(chuàng)建類的對象創(chuàng)建的并不是一個線程對象,要想創(chuàng)建線程對象必須要借助Thread類。只有Thread類才能定義線程對象。
代碼如下:test2 t2 = new test2();
Thread tt2 = new Thread(t2);
tt2才是線程對象,Thread類具有4個構(gòu)造器,最常用的就是具有一個參數(shù)的,我們可以先創(chuàng)建一個實現(xiàn)Runnable接口的類對象,然后作為Thread類的參數(shù)來創(chuàng)建多個線程對象。
當(dāng)我們建立了一個線程類的時候,就要啟動線程,初學(xué)者會認(rèn)為啟動線程就是調(diào)用線程類中的方法。但這點是錯誤的,雖然可以用對象名.run()來調(diào)用run方法,但這并不是線程的啟動。要想啟動線程還要調(diào)用線程的star方法,如:tt2.start();但要注意,一個線程只能調(diào)用一次star方法,第二次啟動線程會發(fā)生IllegalThreadException異常。有關(guān)線程的啟動,應(yīng)用問題以后再做介紹。
好了,有關(guān)線程的基礎(chǔ)知識先介紹到這里。有不足的地方請大家批評指正。