Thread類(lèi)是實(shí)現了Runnable接口的一個(gè)實(shí)例,它代表一個(gè)線(xiàn)程的實(shí)例,并且,啟動(dòng)線(xiàn)程的唯一方法就是通過(guò)Thread類(lèi)的start()實(shí)例方法:
Thread t = new Thread();
t.start();
start()方法是一個(gè)native方法,它將啟動(dòng)一個(gè)新線(xiàn)程,并執行run()方法。Thread類(lèi)默認的run()方法什么也不做就退出了。注意:直接調用run()方法并不會(huì )啟動(dòng)一個(gè)新線(xiàn)程,它和調用一個(gè)普通的java方法沒(méi)有什么區別。
因此,有兩個(gè)方法可以實(shí)現自己的線(xiàn)程:
方法1:自己的類(lèi)extend Thread,并復寫(xiě)run()方法,就可以啟動(dòng)新線(xiàn)程并執行自己定義的run()方法。例如:
public class MyThread extends Thread {
public run() {
System.out.println("MyThread.run()");
}
}
在合適的地方啟動(dòng)線(xiàn)程:new MyThread().start();
方法2:如果自己的類(lèi)已經(jīng)extends另一個(gè)類(lèi),就無(wú)法直接extends Thread,此時(shí),必須實(shí)現一個(gè)Runnable接口:
public class MyThread extends OtherClass implements Runnable {
public run() {
System.out.println("MyThread.run()");
}
}
為了啟動(dòng)MyThread,需要首先實(shí)例化一個(gè)Thread,并傳入自己的MyThread實(shí)例:
MyThread myt = new MyThread();
Thread t = new Thread(myt);
t.start();
事實(shí)上,當傳入一個(gè)Runnable target參數給Thread后,Thread的run()方法就會(huì )調用target.run(),參考JDK源代碼:
public void run() {
if (target != null) {
target.run();
}
}
線(xiàn)程還有一些Name, ThreadGroup, isDaemon等設置,由于和線(xiàn)程設計模式關(guān)聯(lián)很少,這里就不多說(shuō)了。
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=481273
聯(lián)系客服