91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java線程通信wait和notify有什么用

發布時間:2021-08-07 10:06:06 來源:億速云 閱讀:120 作者:小新 欄目:編程語言

這篇文章主要為大家展示了“java線程通信wait和notify有什么用”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“java線程通信wait和notify有什么用”這篇文章吧。

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

Wait()方法

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

Notify()方法

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

Notifyall()方法

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

什么時候使用wait方法

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

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

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

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

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

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

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

這樣的話可以輪流運行線程1和線程2

我們已打印10個數為例子來編寫程序,一共建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();
		}
	}
}
}

結果如圖

java線程通信wait和notify有什么用

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

只需理解運行過程即可

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

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

這個過程一直執行下去直到跳出循環,所以我們可以實現輪流運行

以上是“java線程通信wait和notify有什么用”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

通化市| 盈江县| 苍山县| 邵东县| 漠河县| 林西县| 宁阳县| 丰顺县| 舒兰市| 呼和浩特市| 名山县| 玉林市| 绍兴县| 阳高县| 新津县| 乌拉特前旗| 丰原市| 井冈山市| 博乐市| 宁津县| 裕民县| 麻城市| 太原市| 九台市| 射阳县| 闽清县| 永城市| 洪泽县| 乐业县| 三明市| 视频| 报价| 陆丰市| 虎林市| 股票| 贡嘎县| 区。| 保靖县| 龙泉市| 杭锦后旗| 侯马市|