欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java?詳細(xì)講解線程的狀態(tài)及部分常用方法

 更新時(shí)間:2022年04月14日 09:53:41   作者:湯鍵.TJ  
在Java程序中,一個(gè)線程對(duì)象只能調(diào)用一次start()方法啟動(dòng)新線程,并在新線程中執(zhí)行run()方法。一旦run()方法執(zhí)行完畢,線程就結(jié)束了,本篇來講解Java線程的狀態(tài)以及部分常用方法

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

NEW(新建)new:尚未啟動(dòng)

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

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

BLOCKED(阻塞狀態(tài)) blocked:正在等待監(jiān)視器鎖(內(nèi)部鎖)

WAITING(等待狀態(tài)) waiting:在等待另一個(gè)線程

調(diào)用以下方法會(huì)處于等待狀態(tài)

沒有超時(shí)值的 Object.wait

沒有超時(shí)值的 Thread.join

LockSupport.park

//后續(xù)會(huì)詳細(xì)介紹

TIMED_WAITING(定時(shí)等待狀態(tài)) timed_waiting

調(diào)用以下方法會(huì)處于定時(shí)等待狀態(tài)

Thread.sleep

有超時(shí)值的 Object.wait

有超時(shí)值的 Thread.join

LockSupport.parkNanos

LockSupport.parkUnti

//后續(xù)會(huì)詳細(xì)介紹

TERMINATED(終止?fàn)顟B(tài)):已經(jīng)執(zhí)行完畢

部分實(shí)例:

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

可以通過 Thread.sleep 方法暫停當(dāng)前線程,進(jìn)入WAITING狀態(tài)

在暫停期間,若調(diào)用線程對(duì)象的 interrupt 方法中斷線程,會(huì)拋出 java.lang.InterruptedException 異常

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

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是靜態(tài)方法,所以通過類名來調(diào)用;讓線程睡3s
				}catch (InterruptedException e) {
					e.printStackTrace();
				}
				System.out.println("2");
			}
		});
		tj.start();
		//因?yàn)槭嵌嗑€程,在執(zhí)行tj線程時(shí),主線程依然往下走
		try {
			Thread.sleep(1000);//讓主線程睡1s
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		System.out.println("3");
		//由于tj線程睡得較久,所以先打印3,再打印2
		tj.interrupt();//中斷此線程,但實(shí)際上只是給線程設(shè)置一個(gè)中斷標(biāo)志,線程仍會(huì)執(zhí)行;在這里用于觸發(fā)異常
	}
}

輸出:

1
3
2

  • join  isAlive  介紹

A.join 方法:等線程 A 執(zhí)行完畢后,當(dāng)前線程再繼續(xù)執(zhí)行任務(wù)??梢詡鲄⒅付ㄗ铋L(zhǎng)等待時(shí)間

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

實(shí)例:

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是靜態(tài)方法,所以通過類名來調(diào)用;讓線程睡3s
				}catch (InterruptedException e) {
					e.printStackTrace();
				}
				System.out.println("2");
			}
		});
		tj.start();
		System.out.println(tj.isAlive());//此時(shí)3s未過,tj線程仍在執(zhí)行;所以輸出true
		try {
			tj.join();//等tj線程執(zhí)行完畢再往下執(zhí)行
			//tj.join(1000); 等待tj線程1s再往下執(zhí)行
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		System.out.println("3");
	    System.out.println(tj.getState());
	    System.out.println(tj.isAlive());//tj線程已執(zhí)行完畢;所以輸出false
	}
}

輸出:

true
1
2
3
TERMINATED
false

到此這篇關(guān)于Java 詳細(xì)講解線程的狀態(tài)及部分常用方法的文章就介紹到這了,更多相關(guān)Java 線程的狀態(tài)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • RabbitMQ下載與安裝教程

    RabbitMQ下載與安裝教程

    RabbitMQ是實(shí)現(xiàn)了高級(jí)消息隊(duì)列協(xié)議(AMQP)的開源消息代理軟件(亦稱面向消息的中間件),這篇文章給大家介紹RabbitMQ下載與安裝教程,感興趣的朋友跟隨小編一起看看吧
    2024-02-02
  • Java中調(diào)用Python的實(shí)現(xiàn)示例

    Java中調(diào)用Python的實(shí)現(xiàn)示例

    本文主要介紹了Java中調(diào)用Python的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • java多線程之并發(fā)工具類CountDownLatch,CyclicBarrier和Semaphore

    java多線程之并發(fā)工具類CountDownLatch,CyclicBarrier和Semaphore

    這篇文章主要為大家介紹了java并發(fā)工具類CountDownLatch,CyclicBarrier和Semaphore ,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-12-12
  • MyBatis-Plus實(shí)現(xiàn)多表聯(lián)查的方法實(shí)戰(zhàn)

    MyBatis-Plus實(shí)現(xiàn)多表聯(lián)查的方法實(shí)戰(zhàn)

    這篇文章主要給大家介紹了關(guān)于MyBatis-Plus實(shí)現(xiàn)多表聯(lián)查的方法,MyBatis Plus是一款針對(duì)MyBatis框架的增強(qiáng)工具,它提供了很多方便的方法來實(shí)現(xiàn)多表聯(lián)查,需要的朋友可以參考下
    2023-07-07
  • 詳解spring-boot集成elasticsearch及其簡(jiǎn)單應(yīng)用

    詳解spring-boot集成elasticsearch及其簡(jiǎn)單應(yīng)用

    本篇文章主要介紹了詳解spring-boot集成elasticsearch及其簡(jiǎn)單應(yīng)用,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • springboot打包部署到linux服務(wù)器的方法

    springboot打包部署到linux服務(wù)器的方法

    這篇文章主要介紹了springboot打包部署到linux服務(wù)器的方法,通過實(shí)例代碼相結(jié)合的形式給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-06-06
  • mybatis如何設(shè)置useGeneratedKeys=true

    mybatis如何設(shè)置useGeneratedKeys=true

    這篇文章主要介紹了mybatis如何設(shè)置useGeneratedKeys=true,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。
    2022-01-01
  • 子類繼承父類時(shí)構(gòu)造函數(shù)相關(guān)問題解析

    子類繼承父類時(shí)構(gòu)造函數(shù)相關(guān)問題解析

    這篇文章主要介紹了子類繼承父類時(shí)構(gòu)造函數(shù)相關(guān)問題解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11
  • 詳解Java線程同步器CountDownLatch

    詳解Java線程同步器CountDownLatch

    這篇文章主要介紹了Java線程同步器CountDownLatch的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)Java,感興趣的朋友可以了解下
    2020-09-09
  • Spring?Boot指定外部配置文件簡(jiǎn)單示例

    Spring?Boot指定外部配置文件簡(jiǎn)單示例

    Spring Boot可以讓你將配置外部化,這樣你就可以在不同的環(huán)境中使用相同的應(yīng)用程序代碼,這篇文章主要給大家介紹了關(guān)于Spring?Boot指定外部配置文件的相關(guān)資料,需要的朋友可以參考下
    2024-01-01

最新評(píng)論