Java中終止線程有哪幾種方式?

在討論線程終止的方式前,我們先討論一個問題,線程和進程有什麼區別?
簡而言之,進程是程序運行和資源分配的基本單位,一個程序至少有一個進程,一個進程至少有一個線程(一個進程可以包含多個線程)。進程在執行過程中擁有獨立的內存單元,而多個線程共享內存資源,減少切換次數,從而效率更高。線程是進程的一個實體,是cpu調度和分派的基本單位,是比程序更小的能獨立運行的基本單位。同一進程中的多個線程之間可以併發執行。

線程有哪些狀態?
線程通常都有五種狀態,新建(New)、就緒(Runnable)、運行(Running)、阻塞(Blocked)和死亡(Dead)。
1、新建狀態:當程序使用new關鍵字創建了一個線程對象後,該線程就處於新建狀態,此時僅由JVM爲其分配內存,並初始化其成員變量的值,在未調用該對象的start方法之前,線程都處於新建狀態。

2、就緒狀態:當線程對象調用了start()方法之後,該線程就進入了就緒狀態。Java虛擬機會爲其創建方法調用棧和程序計數器,等待調度運行。但是此時線程調度程序還沒有把該線程設置爲當前線程,此時處於就緒狀態。在線程運行之後,從等待或者睡眠中回來之後,也會處於就緒狀態。

3、運行狀態:如果處於就緒狀態的線程獲得了 CPU,開始執行 run()方法的線程執行體,則該線程處於運行狀態;也就是線程調度程序將處於就緒狀態的線程設置爲當前線程,開始運行run函數當中的代碼。

4、阻塞狀態:線程正在運行的時候,被暫停,通常可以理解爲指線程因爲某種原因放棄了cpu使用權,sleep,suspend,wait等方法都可以導致線程阻塞。阻塞的情況分3種,分別是等待阻塞、同步阻塞和其他阻塞。

5、死亡狀態:如果一個線程的run方法執行結束或者調用stop方法後,該線程就會死亡。對於已經死亡的線程,無法再使用start方法令其進入就緒。

Java中終止線程有哪幾種方式?

1、正常運行結束:如果面試問到這個問題,一般人都會想不到有一種方式可以正常終止線程,那就是正常運行結束。

2、使用退出標誌退出線程:使用退出標識,使得線程正常退出,即當run方法完成後進程終止。

public class ThreadTest extends Thread {

	public static boolean exit = true;

	// 重寫run方法,run方法的方法體就是現場執行體
	public void run() {
		while (!exit) {
			System.out.println("線程終止!");
			try {
				Thread.sleep(5000);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			System.out.println("結束!");
			break;
		}
	}

	public static void main(String[] args) {
		exit = false;
		new ThreadTest().start();
	}

}

3、使用interrupt方法中斷線程:在Thread.java類裏提供了兩種方法判斷線程是否爲停止的。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章