當前位置:才華齋>計算機>java語言>

Java執行緒程式設計中的主執行緒詳細介紹

java語言 閱讀(1.69W)

當Java程式啟動時,一個執行緒立刻執行,該執行緒通常叫做程式的主執行緒(main thread),因為它是程式開始時就執行的。主執行緒的重要性體現在兩方面:

Java執行緒程式設計中的主執行緒詳細介紹

它是產生其他子執行緒的執行緒;

通常它必須最後完成執行,因為它執行各種關閉動作。

儘管主執行緒在程式啟動時自動建立,但它可以由一個Thread物件控制。為此,你必須呼叫方法currentThread()獲得它的一個引用,currentThread()是Thread類的公有的靜態成員。它的通常形式如下:

?

1static Thread currentThread( )

該方法返回一個呼叫它的執行緒的引用。一旦你獲得主執行緒的引用,你就可以像控制其他執行緒那樣控制主執行緒。

讓我們從複習下面例題開始:

?

123456789101112131415161718// Controlling the main Thread.class CurrentThreadDemo {public static void main(String args[]) {Thread t = entThread();tln("Current thread: " + t);// change the name of the threadame("My Thread");tln("After name change: " + t);try {for(int n = 5; n > 0; n--) {tln(n);p(1000);}} catch (InterruptedException e) {tln("Main thread interrupted");}}}

在本程式中,當前執行緒(自然是主執行緒)的引用通過呼叫currentThread()獲得,該引用儲存在區域性變數t中。然後,程式顯示了執行緒的資訊。接著程式呼叫setName()改變執行緒的內部名稱。執行緒資訊又被顯示。然後,一個迴圈數從5開始遞減,每數一次暫停一秒。暫停是由sleep()方法來完成的。Sleep()語句明確規定延遲時間是1毫秒。注意迴圈外的try/catch塊。

Thread類的sleep()方法可能引發一個InterruptedException異常。這種情形會在其他執行緒想要打攪沉睡執行緒時發生。本例只是列印了它是否被打斷的訊息。在實際的程式中,你必須靈活處理此類問題。下面是本程式的輸出:

?

1234567Current thread: Thread[main,5,main]After name change: Thread[My Thread,5,main]54321

注意t作為語句println()中引數運用時輸出的'產生。該顯示順序:執行緒名稱,優先順序以及組的名稱。預設情況下,主執行緒的名稱是main。它的優先順序是5,這也是預設值,main也是所屬執行緒組的名稱。一個執行緒組(thread group)是一種將執行緒作為一個整體集合的狀態控制的資料結構。這個過程由專有的執行時環境來處理,在此就不贅述了。執行緒名改變後,t又被輸出。這次,顯示了新的執行緒名。

讓我們更仔細的研究程式中Thread類定義的方法。sleep()方法按照毫秒級的時間指示使執行緒從被呼叫到掛起。它的通常形式如下:

?

1static void sleep(long milliseconds) throws InterruptedException

掛起的時間被明確定義為毫秒。該方法可能引發InterruptedException異常。

sleep()方法還有第二種形式,顯示如下,該方法允許你指定時間是以毫秒還是以納秒為週期。

?

1static void sleep(long milliseconds, int nanoseconds) throws InterruptedException

第二種形式僅當允許以納秒為時間週期時可用。如上述程式所示,你可以用setName()設定執行緒名稱,用getName()來獲得執行緒名稱(該過程在程式中沒有體現)。這些方法都是Thread 類的成員,宣告如下:

?

12final void setName(String threadName)final String getName( )

這裡,threadName 特指執行緒名稱。