怎樣終止一個線程?


60.
下面那些情況可以終止當前線程的運行?

正確答案: B   你的答案: A (錯誤)

當一個優先級高的線程進入就緒狀態時
拋出一個異常時
當該線程調用sleep()方法時
當創建一個新線程時
B
當一個優先級高的線程進入就緒狀態時,它只是有較高的概率能夠搶到CPU的執行權,不是一定就能搶到執行權,所以A錯
拋出一個例外時,該線程就終止了,所以B正確
當前線程調用sleep()方法或者wait()方法時,只是暫時停止了該線程的運行,不是終止線程,注意題目說的是“終止”,就是完全停止,所以C錯誤
當創建一個新的線程時,該線程也加入到了搶占cpu執行權的隊伍中,但是是否能搶到,並不清楚,和A的思想一樣,所以D錯誤
 
 
線程結束的三個原因:
1、run方法執行完成,線程正常結束
2、線程拋出一個未捕獲的Exception或者Error
3、直接調用該線程的Stop方法結束線程(不建議使用,容易導致死鎖)
 
當run方法執行完后,線程就會退出。但有時run方法是永遠不會結束的。如在服務端程序中使用線程進行監聽客戶端請求,或是其他的需要循環處理的任務。在這種情況下,一般是將這些任務放在一個循環中,如while循環。如果想讓循環永遠運行下去,可以使用while(true){……}來處理。但要想使while循環在某一特定條件下退出,最直接的方法就是設一個boolean類型的標志,並通過設置這個標志為true或false來控制while循環是否退出。下面給出了一個利用退出標志終止線程的例子。 

package chapter2; 

public class ThreadFlag extends Thread 

    public volatile boolean exit = false; 

    public void run() 
    { 
        while (!exit); 
    } 
    public static void main(String[] args) throws Exception 
    { 
        ThreadFlag thread = new ThreadFlag(); 
        thread.start(); 
        sleep(5000); // 主線程延遲5秒 
        thread.exit = true;  // 終止線程thread 
        thread.join(); 
        System.out.println("線程退出!"); 
    } 



    在上面代碼中定義了一個退出標志exit,當exit為true時,while循環退出,exit的默認值為false.在定義exit時,使用了一個 Java關鍵字volatile,這個關鍵字的目的是使exit同步,也就是說在同一時刻只能由一個線程來修改exit的值, 

    2. 使用stop方法終止線程 

    使用stop方法可以強行終止正在運行或掛起的線程。我們可以使用如下的代碼來終止線程: 

thread.stop(); 


    雖然使用上面的代碼可以終止線程,但使用stop方法是很危險的,就象突然關閉計算機電源,而不是按正常程序關機一樣,可能會產生不可預料的結果,因此,並不推薦使用stop方法來終止線程。 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM