91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java線程的狀態與常用方法有哪些

發布時間:2023-04-21 13:45:25 來源:億速云 閱讀:128 作者:iii 欄目:編程語言

這篇文章主要講解了“Java線程的狀態與常用方法有哪些”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Java線程的狀態與常用方法有哪些”吧!

可以通過 Thread.getState 方法獲得線程的狀態(線程一共有 6 種狀態)

NEW(新建)new:尚未啟動

RUNNABLE(可運行狀態)runnable:正在 JVM 中運行;或者正在等待操作系統的其他資源(比如處理器)

//有些編程語言會把RUNNABLE分成2種情況
//1.running
//2.ready
//以上2種在Java中都屬于RUNNABLE

BLOCKED(阻塞狀態) blocked:正在等待監視器鎖(內部鎖)

WAITING(等待狀態) waiting:在等待另一個線程

調用以下方法會處于等待狀態

沒有超時值的 Object.wait

沒有超時值的 Thread.join

LockSupport.park

//后續會詳細介紹

TIMED_WAITING(定時等待狀態) timed_waiting

調用以下方法會處于定時等待狀態

Thread.sleep

有超時值的 Object.wait

有超時值的 Thread.join

LockSupport.parkNanos

LockSupport.parkUnti

//后續會詳細介紹

TERMINATED(終止狀態):已經執行完畢

部分實例:

public class Main {
	public static void main(String[] a) {
		Thread dangqian = Thread.currentThread();//獲取主線程
		System.out.println(dangqian.getState());//輸出RUNNABLE
		//表示主線程正處于RUNNABLE狀態
		
		Thread tj = new Thread();//新建1個線程
		System.out.println(tj.getState());//輸出NEW
		
		Thread tj1 = new Thread(new Runnable() {
			@Override
			public void run() {
				System.out.println("ACM");
			}
		});
		tj1.start();
		//啟動執行完run方法后線程終止 此時處于TERMINATED狀態
	}
}

sleep   interrupt 介紹

可以通過 Thread.sleep 方法暫停當前線程,進入WAITING狀態

在暫停期間,若調用線程對象的 interrupt 方法中斷線程,會拋出 java.lang.InterruptedException 異常

實例(注釋)介紹更為明了:

public class Main {
	public static void main(String[] a) {
		Thread tj = new Thread(new Runnable() {
			@Override
			public void run() {
				System.out.println("1");
				try {
					Thread.sleep(3000);//sleep是靜態方法,所以通過類名來調用;讓線程睡3s
				}catch (InterruptedException e) {
					e.printStackTrace();
				}
				System.out.println("2");
			}
		});
		tj.start();
		//因為是多線程,在執行tj線程時,主線程依然往下走
		try {
			Thread.sleep(1000);//讓主線程睡1s
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		System.out.println("3");
		//由于tj線程睡得較久,所以先打印3,再打印2
		tj.interrupt();//中斷此線程,但實際上只是給線程設置一個中斷標志,線程仍會執行;在這里用于觸發異常
	}
}

輸出:

1
3
2

join  isAlive  介紹

A.join 方法:等線程 A 執行完畢后,當前線程再繼續執行任務。可以傳參指定最長等待時間

A.isAlive 方法:查看線程 A 是否還活著

實例:

public class Main {
	public static void main(String[] a) {
		Thread tj = new Thread(new Runnable() {
			@Override
			public void run() {
				System.out.println("1");
				try {
					Thread.sleep(3000);//sleep是靜態方法,所以通過類名來調用;讓線程睡3s
				}catch (InterruptedException e) {
					e.printStackTrace();
				}
				System.out.println("2");
			}
		});
		tj.start();
		System.out.println(tj.isAlive());//此時3s未過,tj線程仍在執行;所以輸出true
		try {
			tj.join();//等tj線程執行完畢再往下執行
			//tj.join(1000); 等待tj線程1s再往下執行
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		System.out.println("3");
	    System.out.println(tj.getState());
	    System.out.println(tj.isAlive());//tj線程已執行完畢;所以輸出false
	}
}

輸出:

true
1
2
3
TERMINATED
false

感謝各位的閱讀,以上就是“Java線程的狀態與常用方法有哪些”的內容了,經過本文的學習后,相信大家對Java線程的狀態與常用方法有哪些這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

逊克县| 禹州市| 云梦县| 井冈山市| 会泽县| 伊通| 华阴市| 广西| 宁南县| 金溪县| 龙岩市| 阜宁县| 汉沽区| 陇南市| 英德市| 海林市| 庆城县| 普定县| 右玉县| 自贡市| 鹿泉市| 雅江县| 乌审旗| 贵州省| 台东市| 大宁县| 文山县| 灵台县| 晋州市| 厦门市| 丹棱县| 左贡县| 西和县| 临洮县| 淳化县| 石景山区| 清苑县| 乐东| 双桥区| 浠水县| 霞浦县|