麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > Java > 正文

基于Java多線程notify與notifyall的區別分析

2019-11-26 16:07:06
字體:
來源:轉載
供稿:網友

當一個線程進入wait之后,就必須等其他線程notify/notifyall,使用notifyall,可以喚醒
所有處于wait狀態的線程,使其重新進入鎖的爭奪隊列中,而notify只能喚醒一個。注意,任何時候只有一個線程可以獲得鎖,也就是說只有一個線程可以運行synchronized 中的代碼,notifyall只是讓處于wait的線程重新擁有鎖的爭奪權,但是只會有一個獲得鎖并執行。

那么notify和notifyall在效果上又什么實質區別呢?
主要的效果區別是notify用得不好容易導致死鎖,例如下面提到的例子。

復制代碼 代碼如下:

public synchronized void put(Object o) {

    while (buf.size()==MAX_SIZE) {

        wait(); // called if the buffer is full (try/catch removed for brevity)

    }

    buf.add(o);

    notify(); // called in case there are any getters or putters waiting

}

復制代碼 代碼如下:

public synchronized Object get() {

    // Y: this is where C2 tries to acquire the lock (i.e. at the beginning of the method)

    while (buf.size()==0) {

        wait(); // called if the buffer is empty (try/catch removed for brevity)

        // X: this is where C1 tries to re-acquire the lock (see below)

    }

    Object o = buf.remove(0);

    notify(); // called if there are any getters or putters waiting

    return o;

}

所以除非你非常確定notify沒有問題,大部分情況還是是用notifyall。

更多詳細的介紹可以參看:
http://stackoverflow.com/questions/37026/java-notify-vs-notifyall-all-over-again

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 成人爱爱电影 | 天天操天天碰 | 九九视频在线观看黄 | 亚洲免费看片网站 | 成码无人av片在线观看网站 | 国产三级三级三级三级 | 国产剧情v888av | 久久久久久久久久久久网站 | 欧美成年性h版影视中文字幕 | 色阁阁69婷婷 | 欧美成人黄色小视频 | 亚洲精品久久久久www | 深夜福利视频免费观看 | 青久草视频 | 欧美女孩videos | 久久精品国产一区二区电影 | 日本精品久久久久 | 欧美电影在线观看 | 久久成人动漫 | 亚洲午夜影院在线观看 | 久久久久久精 | 福利在线免费视频 | 国产成人高潮免费观看精品 | 在线a亚洲视频播放在线观看 | 一道本不卡一区 | www国产网站 | 亚洲无线看 | 久久小视频 | 91九色网址 | 99精品视频在线 | 成人福利视频导航 | 19禁国产精品福利视频 | 精品亚洲夜色av98在线观看 | 国产喷白浆10p | 色欲香天天天综合网站 | av电影在线观看免费 | 日韩视频一区二区三区在线观看 | 欧美一级三级在线观看 | 最近国产中文字幕 | 日本精品二区 | 一本到免费视频 |