欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

淺談線程通信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方法

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

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

我們已經(jīng)知道開啟多線程中,如賣票,每個窗口賣的票的順序是隨機的,如果我們有2個賣票窗口,規(guī)定100張票必須輪流賣,A窗口賣完一張票之后下一張票一定是由B窗口賣的,我們?nèi)绾螌崿F(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();
		}
	}
}
}

結(jié)果如圖

可以看到已經(jīng)實現(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)輪流運行

總結(jié)

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

相關文章

  • Jdbc連接數(shù)據(jù)庫基本步驟詳解

    Jdbc連接數(shù)據(jù)庫基本步驟詳解

    這篇文章主要為大家詳細介紹了Jdbc連接數(shù)據(jù)庫的基本步驟,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • servlet的url-pattern匹配規(guī)則詳細描述(小結(jié))

    servlet的url-pattern匹配規(guī)則詳細描述(小結(jié))

    在利用servlet或Filter進行url請求的匹配時,很關鍵的一點就是匹配規(guī)則。這篇文章主要介紹了servlet的url-pattern匹配規(guī)則詳細描述(小結(jié)),非常具有實用價值,需要的朋友可以參考下
    2018-07-07
  • Java中將String類型轉(zhuǎn)換為int類型的幾種常見方法

    Java中將String類型轉(zhuǎn)換為int類型的幾種常見方法

    在java中經(jīng)常會遇到需要對數(shù)據(jù)進行類型轉(zhuǎn)換的場景,這篇文章主要給大家介紹了關于Java中將String類型轉(zhuǎn)換為int類型的幾種常見方法,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-07-07
  • java利用pdfbox+poi往pdf插入數(shù)據(jù)

    java利用pdfbox+poi往pdf插入數(shù)據(jù)

    這篇文章主要給大家介紹了關于java利用pdfbox+poi如何往pdf插入數(shù)據(jù)的相關資料,文中通過實例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2022-02-02
  • Security 登錄認證流程詳細分析詳解

    Security 登錄認證流程詳細分析詳解

    本文Security登錄認證流程詳細分析詳解,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • java-spark中各種常用算子的寫法示例

    java-spark中各種常用算子的寫法示例

    這篇文章主要給大家介紹了關于java-spark中各種常用算子的寫法的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2018-06-06
  • 基于@Table注解無法使用及報紅的解決

    基于@Table注解無法使用及報紅的解決

    這篇文章主要介紹了基于@Table注解無法使用及報紅的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • springboot詳解整合swagger方案

    springboot詳解整合swagger方案

    Swagger是一個規(guī)范和完整的框架,用于生成、描述、調(diào)用和可視化?Restful?風格的?Web?服務??傮w目標是使客戶端和文件系統(tǒng)作為服務器以同樣的速度來更新。文件的方法、參數(shù)和模型緊密集成到服務器端的代碼,允許API來始終保持同步
    2022-07-07
  • Java 定時器(Timer)及線程池里使用定時器實例代碼

    Java 定時器(Timer)及線程池里使用定時器實例代碼

    這篇文章主要介紹了Java 定時器(Timer)及線程池里使用定時器實例代碼的相關資料,需要的朋友可以參考下
    2016-12-12
  • @Transactional遇到try catch失效的問題

    @Transactional遇到try catch失效的問題

    這篇文章主要介紹了@Transactional遇到try catch失效的問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01

最新評論