一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|JavaScript|易語言|

服務器之家 - 編程語言 - JAVA教程 - 淺談線程通信wait,notify作用

淺談線程通信wait,notify作用

2021-03-11 14:19樂小小98 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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
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();
        }
    }
}
}

結果如圖

淺談線程通信wait,notify作用

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

只需理解運行過程即可

?
1
2
3
4
5
6
7
8
9
10
11
12
13
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,

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

總結

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

原文鏈接:http://blog.csdn.net/yutong5818/article/details/78426599

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产福利片在线 | 国产婷婷成人久久av免费高清 | 成人伊人青草久久综合网破解版 | 国产成人愉拍免费视频 | 久久re热在线视频精6 | 久久伊人精品青青草原2021 | 国产美女在线一区二区三区 | 秋霞理论在一l级毛片 | 亚洲热在线观看 | 免费观看视频高清在线 | 国产欧美精品专区一区二区 | 四虎影院新网址 | 国产在亚洲线视频观看 | 国产成人免费 | 久久中文字幕无线观看 | 女bbbbxxx孕妇 | 日本免费一区二区三区四区五六区 | 青青青青久久国产片免费精品 | 精品国产欧美一区二区三区成人 | 精品一久久香蕉国产线看观 | 雪恋电影完整版免费观看 | 国产成人a v在线影院 | 亚洲精品综合一区二区 | 国产a一级毛片午夜剧院 | 亚洲狠狠婷婷综合久久久久网站 | 日韩在线观看网址 | 国产重口老太伦 | 日本漫画工囗全彩内番e绅 日本伦理动漫在线观看 | 痴mu动漫成年动漫在线观看 | 亚洲不卡高清免v无码屋 | 12345国产精品高清在线 | 九九精品成人免费国产片 | 范冰冰特黄xx大片 | 美女gif趴跪式抽搐动态图 | 嫩草影院永久一二三入口 | 精精国产www视频在线观看免费 | www视频免费看 | 国产精品久久久免费视频 | 538亚洲欧美国产日韩在线精品 | 99热这里只有精品国产免费 | 国内剧情麻豆 |