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

淺談線程通信wait,notify作用

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

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

Wait()方法

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

Notify()方法

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

Notifyall()方法

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

什么時候使用wait方法

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

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

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

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

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

線程1運行完之后等待一下,然后線程2運行,線程2運行完之后再喚醒線程1然后再次

線程1運行完之后等待一下,然后線程2運行,線程2運行完之后再喚醒線程1

這樣的話可以輪流運行線程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();
		}
	}
}
}

結果如圖

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

只需理解運行過程即可

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

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

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

總結

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

相關文章

  • Mac電腦如何通過?IntelliJ?IDEA?遠程連接?MySQL

    Mac電腦如何通過?IntelliJ?IDEA?遠程連接?MySQL

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

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

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

    Spring Boot 訪問安全之認證和鑒權詳解

    這篇文章主要介紹了Spring Boot 訪問安全之認證和鑒權,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    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)聽,重復登錄后,強制之前登錄的session過期。有興趣的可以了解一下。
    2017-01-01
  • idea版本更新安裝教程詳解

    idea版本更新安裝教程詳解

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

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

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

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

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

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

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

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

    大華樂橙SDK(LechangeSDK)是一套由大華科技推出的智能安防領域專用軟件開發(fā)工具包,下面這篇文章主要介紹了Java對接樂橙攝像頭(綁定設備/直播/控制)的相關資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2025-12-12

最新評論

昂仁县| 西安市| 绥宁县| 凤山市| 山东| 平罗县| 巴楚县| 蓝田县| 象州县| 武鸣县| 东明县| 湖州市| 浦东新区| 开原市| 南乐县| 兴和县| 芒康县| 南宁市| 穆棱市| 澄城县| 紫金县| 忻州市| 小金县| 松阳县| 汉中市| 安义县| 丽江市| 龙游县| 高要市| 河北区| 蕲春县| 五家渠市| 庄浪县| 庆安县| 尼勒克县| 安新县| 莱阳市| 甘肃省| 迁安市| 通河县| 商河县|