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