熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java高級技術 >> 正文

Java2入門經典教程 11.1 了解線程[6]

2013-11-23 19:58:36  來源: Java高級技術 

    試試看中斷一個線程

public static void main(String[] args)
  {
    // Create three threads
    Thread first = new TryThread(Hopalong Cassidy L);
    Thread second = new TryThread(Marilyn Monroe L);
    Thread third = new TryThread(Slim Pickens L);

    Systemoutprintln(Press Enter when you have had enough\n);
    firststart();                      // Start the first thread
    secondstart();                     // Start the second thread
    thirdstart();                      // Start the third thread
    try
    {
      Systeminread();                 // Wait until Enter key pressed
      Systemoutprintln(Enter pressed\n);
    }
    catch (IOException e)               // Handle IO exception
    {
      Systemoutprintln(e);            // Output the exception
    }
    Systemoutprintln(Ending main());
    return;
  }

    現在程序將產生如下輸出

    Press Enter when you have had enough…
    Slim Hopalong Marilyn Caxsidy
    Hopalong Monrog
    Marily Cassidy
    Hopalong Pickens
    Slim Cassidy
    Hopalong Monroe
    Marilyn
    Enter prossed…
    Ending main()
    Marilyn Monroe javalang

    如何工作

    由於當你鍵入回車鍵後main()方法對每個線程調用了interrupt()方法每個線程中調用sleep()方法注冊這樣一個事實線程被中斷並拋出一個InterruptedException這由run()方法中的catch塊捕獲到並產生你看到的新輸出因為catch塊在while循環的外部因此這個線程調用的run()方法返回並且每個線程終止

    通過對線程調用isInterrupted()方法你可以檢查一個線程是否被中斷如果對該線程詭用了interrupt()則返回true由於這是個實例方法你可以用這種方法判定在一個線程中是否中斷了另一個線程例如main()中你可以寫成

    if (firstisInterrupted ())
    sydtemoutprintlnFirst thread been interrupted);

    注意這只能判定是否通過對線程調用interrupt()設置了中斷標志並不能判定線程是否仍在運行一個線程可以有自己的中斷標志設置和繼續執行它不會因interrupt()的調用而被迫終止它測試當前執行的線程是否被中斷如果是它在當前Thread對象中清除中斷標志並返回true

    實例方法Interrupted()對線程的中斷標志沒有什麼影響如果標志被設置保留此設置但是Thread類中的靜態方法interrupted()是不同的它測試是否當前執行的線程被中斷如果是它清除當前Thread對象中的中斷標志並返回true

    當拋出一個InterruptedException異常時在線程中注冊中斷的標志被清除因此對islnterrupted()interrupted()的調用將返回false

[]  []  []  []  []  []  []  []  


From:http://tw.wingwit.com/Article/program/Java/gj/201311/27758.html
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.