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

淺談線程通信wait,notify作用

 更新時間:2017年12月25日 15:59:33   作者:樂小小98  
這篇文章主要介紹了淺談線程通信wait,notify作用,具有一定借鑒價值,需要的朋友可以參考下

線程通信的目的是為了能夠讓線程之間相互發(fā)送信號。另外,線程通信還能夠使得線程等待其它線程的信號,比如,線程B可以等待線程A的信號,這個信號可以是線程A已經(jīng)處理完成的信號

Wait()方法

-中斷方法的執(zhí)行,使本線程等待,暫時讓出cpu的使用權(quán),并允許其他線程使用這個同步方法

Notify()方法

-喚醒由于使用這個同步方而處于等待線程的某一個結(jié)束等待

Notifyall()方法

喚醒所有由于使用這個同步方法而處于等待的線程結(jié)束等待

什么時候使用wait方法

當(dāng)一個線程使用的同步方法中用到某個變量,而此變量又需要其他線程修改才能符合本線程的需要,那么可以在同步方法中使用wait()方法

在這里我以課上的一個例子為例,簡述一下wait和notify的作用

我們已經(jīng)知道開啟多線程中,如賣票,每個窗口賣的票的順序是隨機(jī)的,如果我們有2個賣票窗口,規(guī)定100張票必須輪流賣,A窗口賣完一張票之后下一張票一定是由B窗口賣的,我們?nèi)绾螌崿F(xiàn)這個功能?

首先我想的是可以設(shè)置一個if語句,if(i%2==0)則線程1運(yùn)行,否則則線程2運(yùn)行,但是線程1和線程2的運(yùn)行是隨機(jī)的,不能規(guī)定由i的大小來確定誰運(yùn)行

那我們可以用線程中的wait()和notify()

線程1運(yùn)行完之后等待一下,然后線程2運(yùn)行,線程2運(yùn)行完之后再喚醒線程1然后再次

線程1運(yùn)行完之后等待一下,然后線程2運(yùn)行,線程2運(yùn)行完之后再喚醒線程1

這樣的話可以輪流運(yùn)行線程1和線程2

我們已打印10個數(shù)為例子來編寫程序,一共建2個類Myprint和MyprintTest

Myprint.java

public class Myprint implements Runnable { 
private int i=0;
@Override 
public void run() {
	try {
		print();
	}
	catch (InterruptedException e) {
		// TODO Auto-generated catch block 
		e.printStackTrace();
	}
}
public synchronized void  print() throws InterruptedException{
	while(i<10){
		System.out.println(Thread.currentThread().getName()+":"+i);
		i++;
		notify();
		try {
			wait();
		}
		catch (InterruptedException e) {
			e.printStackTrace();
		}
	}
}
}

結(jié)果如圖

可以看到已經(jīng)實現(xiàn)了線程1和線程2相互交替打印

只需理解運(yùn)行過程即可

while(i<10){
	System.out.println(Thread.currentThread().getName()+":"+i);
	i++;
	notify();
	try {
		wait();
	}
	catch (InterruptedException e) {
		e.printStackTrace();
	}
}
}
}

當(dāng)i<10時,打印線程1,然后執(zhí)行喚醒,由于前面沒有線程所以這一步不執(zhí)行,然后線程1等待,執(zhí)行完線程2喚醒前面的線程即線程1,然后打印線程1,

這個過程一直執(zhí)行下去直到跳出循環(huán),所以我們可以實現(xiàn)輪流運(yùn)行

總結(jié)

以上就是本文關(guān)于淺談線程通信wait,notify作用的全部內(nèi)容,希望對大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關(guān)專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!

相關(guān)文章

  • Mac電腦如何通過?IntelliJ?IDEA?遠(yuǎn)程連接?MySQL

    Mac電腦如何通過?IntelliJ?IDEA?遠(yuǎn)程連接?MySQL

    本文詳解Mac通過IntelliJ?IDEA遠(yuǎn)程連接MySQL的步驟,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2025-08-08
  • Java LongAdder使用與應(yīng)用實戰(zhàn)

    Java LongAdder使用與應(yīng)用實戰(zhàn)

    LongAdder是 Java 并發(fā)編程中為高并發(fā)計數(shù)而生的利器,本文就來詳細(xì)的介紹一下Java LongAdder的使用,具有一定的參考價值,感興趣的可以了解一下
    2025-10-10
  • Spring Boot 訪問安全之認(rèn)證和鑒權(quán)詳解

    Spring Boot 訪問安全之認(rèn)證和鑒權(quán)詳解

    這篇文章主要介紹了Spring Boot 訪問安全之認(rèn)證和鑒權(quán),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Java源碼解析之TypeVariable詳解

    Java源碼解析之TypeVariable詳解

    這篇文章主要介紹了Java源碼解析之TypeVariable詳解,具有一定參考價值,需要的朋友可以了解下。
    2017-10-10
  • 詳解Spring MVC攔截器實現(xiàn)session控制

    詳解Spring MVC攔截器實現(xiàn)session控制

    這篇文章主要介紹了詳解Spring MVC攔截器實現(xiàn)session控制,使用session監(jiān)聽,重復(fù)登錄后,強(qiáng)制之前登錄的session過期。有興趣的可以了解一下。
    2017-01-01
  • idea版本更新安裝教程詳解

    idea版本更新安裝教程詳解

    idea的更新版本比較特殊,需要重新安裝一下,這篇文章給大家介紹idea版本更新安裝教程詳解,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2020-11-11
  • Java實現(xiàn)簡單井字棋小游戲代碼實例

    Java實現(xiàn)簡單井字棋小游戲代碼實例

    這篇文章主要介紹了Java實現(xiàn)簡單井字棋小游戲代碼實例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-03-03
  • java實現(xiàn)簡單石頭剪刀布游戲

    java實現(xiàn)簡單石頭剪刀布游戲

    這篇文章主要介紹了java實現(xiàn)簡單石頭剪刀布游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-02-02
  • Java notify和notifyAll的區(qū)別和相同

    Java notify和notifyAll的區(qū)別和相同

    本文主要介紹Java notify和notifyAll的知識,這里整理詳細(xì)的資料來說明notify 和NotifAll的區(qū)別,有需要的小伙伴可以參考下
    2016-09-09
  • Java對接樂橙攝像頭詳細(xì)步驟(綁定設(shè)備/直播/控制)

    Java對接樂橙攝像頭詳細(xì)步驟(綁定設(shè)備/直播/控制)

    大華樂橙SDK(LechangeSDK)是一套由大華科技推出的智能安防領(lǐng)域?qū)S密浖_發(fā)工具包,下面這篇文章主要介紹了Java對接樂橙攝像頭(綁定設(shè)備/直播/控制)的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-12-12

最新評論

措美县| 米脂县| 神农架林区| 和顺县| 富顺县| 呼图壁县| 永修县| 璧山县| 白朗县| 黑山县| 阿拉善盟| 澄迈县| 怀来县| 古丈县| 丰台区| 扎囊县| 庆云县| 营口市| 隆德县| 玉屏| 庄浪县| 尼勒克县| 惠安县| 侯马市| 社旗县| 唐海县| 长泰县| 亚东县| 呼玛县| 湘阴县| 武山县| 隆子县| 武川县| 益阳市| 潼南县| 屏东市| 洱源县| 靖安县| 武川县| 兴山县| 营口市|