最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

NEW(新建)new:尚未啟動

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

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

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

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

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

沒有超時值的 Object.wait

沒有超時值的 Thread.join

LockSupport.park

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

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

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

Thread.sleep

有超時值的 Object.wait

有超時值的 Thread.join

LockSupport.parkNanos

LockSupport.parkUnti

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

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

部分實例:

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個線程
		System.out.println(tj.getState());//輸出NEW
		
		Thread tj1 = new Thread(new Runnable() {
			@Override
			public void run() {
				System.out.println("ACM");
			}
		});
		tj1.start();
		//啟動執(zhí)行完run方法后線程終止 此時處于TERMINATED狀態(tài)
	}
}
  • sleep   interrupt 介紹

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

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

輸出:

1
3
2

  • join  isAlive  介紹

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

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是靜態(tài)方法,所以通過類名來調(diào)用;讓線程睡3s
				}catch (InterruptedException e) {
					e.printStackTrace();
				}
				System.out.println("2");
			}
		});
		tj.start();
		System.out.println(tj.isAlive());//此時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 詳細講解線程的狀態(tài)及部分常用方法的文章就介紹到這了,更多相關(guān)Java 線程的狀態(tài)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java將excel轉(zhuǎn)為pdf的方法步驟

    java將excel轉(zhuǎn)為pdf的方法步驟

    之前工作需要,查了挺多種Excel轉(zhuǎn)PDF的方法,下面這篇文章主要給大家介紹了關(guān)于java將excel轉(zhuǎn)為pdf的相關(guān)資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-01-01
  • java dump文件怎么生成和分析-JMAP用法詳解

    java dump文件怎么生成和分析-JMAP用法詳解

    這篇文章主要介紹了java dump文件怎么生成和分析-JMAP用法詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • 淺談springioc實例化bean的三個方法

    淺談springioc實例化bean的三個方法

    下面小編就為大家?guī)硪黄獪\談springioc實例化bean的三個方法。小編覺得挺不錯的,現(xiàn)在就想給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • @KafkaListener 如何使用

    @KafkaListener 如何使用

    這篇文章主要介紹了@KafkaListener 如何使用,本文通過圖文實例代碼相結(jié)合給大家詳細講解,文末給大家介紹了kafka的消費者分區(qū)分配策略,需要的朋友可以參考下
    2023-02-02
  • java分布式面試CAP分別代表含義分析

    java分布式面試CAP分別代表含義分析

    這篇文章主要為大家介紹了java分布式面試中關(guān)于CAP分別代表含義的問題分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步
    2022-03-03
  • Android 資源 id詳解及的動態(tài)獲取

    Android 資源 id詳解及的動態(tài)獲取

    這篇文章主要介紹了Android 資源 id詳解及的動態(tài)獲取的相關(guān)資料,需要的朋友可以參考下
    2016-12-12
  • mybatis的mapper.xml中resultMap標(biāo)簽的使用詳解

    mybatis的mapper.xml中resultMap標(biāo)簽的使用詳解

    這篇文章主要介紹了mybatis的mapper.xml中resultMap標(biāo)簽的使用詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • Java連接MYSQL數(shù)據(jù)庫的實現(xiàn)步驟

    Java連接MYSQL數(shù)據(jù)庫的實現(xiàn)步驟

    以下的文章主要描述的是java連接MYSQL數(shù)據(jù)庫的正確操作步驟,在此篇文章里我們主要是以實例列舉的方式來引出其具體介紹
    2013-06-06
  • SpringBoot 2 統(tǒng)一異常處理過程解析

    SpringBoot 2 統(tǒng)一異常處理過程解析

    這篇文章主要介紹了SpringBoot 2 統(tǒng)一異常處理過程解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-09-09
  • Java中區(qū)別.toString() ,(String),valueOf()方法

    Java中區(qū)別.toString() ,(String),valueOf()方法

    這篇文章主要介紹了Java中區(qū)別.toString() ,(String),valueOf()方法,需要的朋友可以參考下
    2017-01-01

最新評論

随州市| 墨脱县| 和平区| 常熟市| 象山县| 岢岚县| 潜江市| 永靖县| 正蓝旗| 布拖县| 时尚| 伊宁市| 禄丰县| 通州区| 郧西县| 仙居县| 昌都县| 安庆市| 西乌珠穆沁旗| 哈巴河县| 当阳市| 吉木萨尔县| 仲巴县| 三都| 通城县| 泰来县| 周宁县| 嵊泗县| 茌平县| 禹州市| 萝北县| 阿尔山市| 西丰县| 水富县| 阜城县| 灵武市| 甘谷县| 山丹县| 宜兰县| 儋州市| 山西省|