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