Java線程編程中的主線程講解_java

來源:互聯網
上載者:User

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

  1. 它是產生其他子線程的線程;
  2. 通常它必須最後完成執行,因為它執行各種關閉動作。

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

  static Thread currentThread( )


該方法返回一個調用它的線程的引用。一旦你獲得主線程的引用,你就可以像控制其他線程那樣控制主線程。

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

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

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

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

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

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

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

  static void sleep(long milliseconds) throws InterruptedException


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

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

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

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

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


這裡,threadName 特指線程名稱。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.