亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java線程等待喚醒幾種方法小結(jié)

 更新時(shí)間:2023年10月07日 14:47:05   作者:與遨游于天地  
線程等待和喚醒有三種實(shí)現(xiàn)方法,分別是Object類中的wait、notify,Condition類中的await、signal,LockSupport類中的park、unpark方法,感興趣的可以了解一下

線程等待和喚醒有三種實(shí)現(xiàn)方法,分別是Object類中的wait、notify;Condition類中的await、signal;LockSupport類中的park、unpark方法。

1、Object類中的wait、notify必須配合Synchronized關(guān)鍵字一起使用,否則會(huì)拋出IllegalMonitorStateException異常,并且notify喚醒需要在wait之后,否則無(wú)法喚醒。

public static void main(String[] args) {
		Object o = new Object();
		new Thread(()->{
			synchronized (o) {
				try {
					o.wait();
				} catch (InterruptedException e) {
					throw new RuntimeException(e);
				}
				System.out.println("被喚醒");
			}
		}).start();
		System.out.println("準(zhǔn)備喚醒");
		synchronized (o) {
			o.notify();
		}
   }

2、Condition類中的await、signal必須配合Lock.lock、unlock一起使用,否則會(huì)拋出IllegalMonitorStateException異常,并且signal喚醒需要在await之后使用,否則無(wú)法喚醒。

public static void main(String[] args) {
		Lock reentrantLock = new ReentrantLock();
		Condition condition = reentrantLock.newCondition();
		new Thread(()->{
			reentrantLock.lock();
			try {
				condition.await();
				System.out.println("被喚醒");
			} catch (InterruptedException e) {
				throw new RuntimeException(e);
			} finally {
				reentrantLock.unlock();
			}
		}).start();
		System.out.println("準(zhǔn)備喚醒");
		reentrantLock.lock();
		try {
			condition.signal();
			Thread.sleep(1000);
		} catch (InterruptedException e) {
			throw new RuntimeException(e);
		} finally {
			reentrantLock.unlock();
		}
   }

3、LockSupport類中的park、unpark屬于靜態(tài)方法,unpark會(huì)生成許可證,park會(huì)消費(fèi)許可證。先調(diào)用park如果未生成許可證,那么會(huì)阻塞等待unpark生成許可證,并不會(huì)拋出異常。他們只和線程關(guān)聯(lián),且線程最多只能有一個(gè)許可證,這意味著每次生成憑證之后,需要等消費(fèi)完才能繼續(xù)生成憑證。

public static void main(String[] args) {
		Thread thread = new Thread(() -> {
			try {
				Thread.sleep(1000);
			} catch (InterruptedException e) {
				throw new RuntimeException(e);
			}
			LockSupport.park();
			System.out.println("被喚醒");
		});
		thread.start();
		System.out.println("準(zhǔn)備喚醒");
        //斷點(diǎn)可以看到unpark先執(zhí)行,之后執(zhí)行park
		LockSupport.unpark(thread);
        //thread.start()在unpark之后無(wú)效,線程必須啟動(dòng)才能unpark成功
	}

到此這篇關(guān)于Java線程等待喚醒幾種方法小結(jié)的文章就介紹到這了,更多相關(guān)Java線程等待喚醒內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • 使用maven?shade插件解決項(xiàng)目版本沖突詳解

    使用maven?shade插件解決項(xiàng)目版本沖突詳解

    這篇文章主要為大家介紹了使用maven?shade插件解決項(xiàng)目版本沖突詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • 五分鐘帶你學(xué)會(huì)用java解析json字符串

    五分鐘帶你學(xué)會(huì)用java解析json字符串

    這篇文章主要給大家介紹了關(guān)于用java解析json字符串的相關(guān)資料,JSON是一種輕量級(jí)的、基于文本的、與語(yǔ)言無(wú)關(guān)的數(shù)據(jù)交換格式,易于人和機(jī)器讀寫,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-07-07
  • IDEA使用JDBC導(dǎo)入配置jar包連接MySQL數(shù)據(jù)庫(kù)

    IDEA使用JDBC導(dǎo)入配置jar包連接MySQL數(shù)據(jù)庫(kù)

    這篇文章介紹了IDEA使用JDBC安裝配置jar包連接MySQL數(shù)據(jù)庫(kù)的方法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-12-12
  • Java程序初始化啟動(dòng)自動(dòng)執(zhí)行的三種方式

    Java程序初始化啟動(dòng)自動(dòng)執(zhí)行的三種方式

    這篇文章主要介紹了Java程序初始化啟動(dòng)自動(dòng)執(zhí)行的三種方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • java類與對(duì)象案例之打字游戲

    java類與對(duì)象案例之打字游戲

    這篇文章主要為大家詳細(xì)介紹了java類與對(duì)象案例之打字游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-07-07
  • 詳解Mybatis核心類SqlSessionFactory的構(gòu)建

    詳解Mybatis核心類SqlSessionFactory的構(gòu)建

    這篇文章主要為大家詳細(xì)介紹了Mybatis核心類SqlSessionFactory的構(gòu)建過(guò)程,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2022-12-12
  • 完美解決MybatisPlus插件分頁(yè)查詢不起作用總是查詢?nèi)繑?shù)據(jù)問(wèn)題

    完美解決MybatisPlus插件分頁(yè)查詢不起作用總是查詢?nèi)繑?shù)據(jù)問(wèn)題

    這篇文章主要介紹了解決MybatisPlus插件分頁(yè)查詢不起作用總是查詢?nèi)繑?shù)據(jù)問(wèn)題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-08-08
  • Java中遞歸、循環(huán)的優(yōu)劣分析

    Java中遞歸、循環(huán)的優(yōu)劣分析

    這篇文章主要給大家介紹了關(guān)于Java中遞歸、循環(huán)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者使用Java具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • java字符轉(zhuǎn)碼的三種方法總結(jié)及實(shí)例

    java字符轉(zhuǎn)碼的三種方法總結(jié)及實(shí)例

    這篇文章主要介紹了 java字符轉(zhuǎn)碼的三種方法總結(jié)及實(shí)例的相關(guān)資料,需要的朋友可以參考下
    2017-03-03
  • Java?8函數(shù)式接口之Consumer用法示例詳解

    Java?8函數(shù)式接口之Consumer用法示例詳解

    這篇文章主要為大家介紹了Java?8函數(shù)式接口之Consumer用法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07

最新評(píng)論