1.派生線程類 Thread 的子類,并在子類中重寫(xiě) run()方法。Thread 子類的實(shí)例對(duì)象是 一個(gè)線程對(duì)象,并且該線程有專門(mén)定制的線程 run()方法,啟動(dòng)線程后就執(zhí)行子類中 重寫(xiě)的 run()方法。
2.實(shí)現(xiàn) Runnable 接口并重新定義 run()方法。先定義一個(gè)實(shí)現(xiàn) Runnable()接口的類,在 該類中定義 run()方法,然后創(chuàng)建新的線程類對(duì)象,并以該對(duì)象作為 Thread 類構(gòu)造 方法的 數(shù)創(chuàng)建一個(gè)線程。
// 文 程序 10.6 ThreadStart.java public class ThreadStart
{
public static void main(String[ ] args) {
述 程啟動(dòng)
Runnable r = new RunnableThread();
Thread rt = new Thread(r);
rt.start();
SubThread st = new SubThread("SubThread");// 建 SubThread
// 建 RunnableThread // 建 程 rt
//啟動(dòng) 程
程序 10.6 中,類 RunnableThread 實(shí)現(xiàn) Runnable 接 口,并重寫(xiě) run 方法;SubThread 繼承 Thread,同樣也 實(shí)現(xiàn)了 run 方法。在 main 方法中,先通過(guò) RunnableThread 類創(chuàng)建,并啟動(dòng)線程 rt;然后通過(guò) SubThrea 類創(chuàng)建, 并啟動(dòng) 一個(gè)線程 st。
st.start();
//啟動(dòng) 程
} }
class RunnableThread implements Runnable{ // 載 run
public void run() {
System.out.println("RunnableThread 啟動(dòng)");
class SubThread extends Thread{ SubThread(){}
// SubThread 的 方法 SubThread(String Name)
{
super(Name);
}
// 載 run public void run() {
System.out.println("SubThread 啟動(dòng)");
//
// SubThread 方法
// 用 的 方法
//
} }
} }
一個(gè)線程有 4 種 態(tài),任何一個(gè)線程都處于這 4 種 態(tài)中的一種 態(tài)。
1.創(chuàng)建(new) 態(tài):調(diào)用 new 方法產(chǎn)生一個(gè)線程對(duì)象后、調(diào)用 start 方法前所處的 態(tài)。線程對(duì)象雖然已經(jīng)創(chuàng)建,但還沒(méi)有調(diào)用 start 方法啟動(dòng),因此無(wú)法執(zhí)行。當(dāng)線程 處于創(chuàng)建 態(tài)時(shí),線程對(duì)象可以調(diào)用 start 方法進(jìn)入啟動(dòng) 態(tài),也可以調(diào)用 stop 方法
進(jìn)入 態(tài)。
2.可運(yùn)行(runnable) 態(tài):當(dāng)線程對(duì)象執(zhí)行 start()方法后,線程就 到可運(yùn)行 態(tài)。
進(jìn)入此 態(tài)只是說(shuō) 線程對(duì)象具有了可以運(yùn)行的條件,但線程并不一定處于運(yùn)行 態(tài)。因?yàn)樵趩翁幚砥飨到y(tǒng)中運(yùn)行多線程程序時(shí),一個(gè)時(shí)間點(diǎn)只有一個(gè)線程運(yùn)行,系 統(tǒng)通過(guò)調(diào) 機(jī)制實(shí)現(xiàn) 意義上的運(yùn)行線程 處理器。因此一個(gè)線程是否在運(yùn)行, 了線程必須處于 Runnable 態(tài)之 ,還取決于優(yōu)先級(jí)和調(diào) 。
3.不可運(yùn)行(non Runnable) 態(tài):線程處于不可運(yùn)行 態(tài)是由于線程被 起或者發(fā) 生 ,例如對(duì)一個(gè)線程調(diào)用 wait() 數(shù)后,它就可能進(jìn)入 態(tài);調(diào)用線程的 notify 或 notifyAll 方法后它才能 次回到可執(zhí)行 態(tài)。
4.退出(done) 態(tài):一個(gè)線程可以從任何一個(gè) 態(tài)中調(diào)用 stop 方法進(jìn)入 出 態(tài)。 線程一 進(jìn)入 出 態(tài)就不存在了,不能 回到其他的 態(tài)。 此之 ,如果線 程執(zhí)行完 run 方法,也會(huì)自動(dòng)進(jìn)入 出 態(tài)。
###等待線程結(jié)束
>1.public final boolean isAlive()
2.public final void join(long millis) throws InterruptedException
###線程調(diào)度
>1.public final void setPriority(int newPriority)
2.public final int getPriority()