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

基于Java多線程notify與notifyall的區(qū)別分析

 更新時(shí)間:2013年05月10日 10:20:21   作者:  
本篇文章對(duì)Java中多線程notify與notifyall的區(qū)別進(jìn)行了詳細(xì)的分析介紹。需要的朋友參考下

當(dāng)一個(gè)線程進(jìn)入wait之后,就必須等其他線程notify/notifyall,使用notifyall,可以喚醒
所有處于wait狀態(tài)的線程,使其重新進(jìn)入鎖的爭(zhēng)奪隊(duì)列中,而notify只能喚醒一個(gè)。注意,任何時(shí)候只有一個(gè)線程可以獲得鎖,也就是說(shuō)只有一個(gè)線程可以運(yùn)行synchronized 中的代碼,notifyall只是讓處于wait的線程重新?lián)碛墟i的爭(zhēng)奪權(quán),但是只會(huì)有一個(gè)獲得鎖并執(zhí)行。

那么notify和notifyall在效果上又什么實(shí)質(zhì)區(qū)別呢?
主要的效果區(qū)別是notify用得不好容易導(dǎo)致死鎖,例如下面提到的例子。

復(fù)制代碼 代碼如下:

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

}

復(fù)制代碼 代碼如下:

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沒(méi)有問(wèn)題,大部分情況還是是用notifyall。

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

相關(guān)文章

  • Java中的2種集合排序方法介紹

    Java中的2種集合排序方法介紹

    這篇文章主要介紹了Java中的2種集合排序方法介紹,本文直接給出代碼,相關(guān)說(shuō)明請(qǐng)看代碼中的注釋,需要的朋友可以參考下
    2014-10-10
  • Java函數(shù)式編程(六):Optional

    Java函數(shù)式編程(六):Optional

    這篇文章主要介紹了Java函數(shù)式編程(六):Optional,本文是系列文章的第6篇,其它文章請(qǐng)參閱本文底部的相關(guān)文章,需要的朋友可以參考下
    2014-09-09
  • 詳解mybatis plus使用insert沒(méi)有返回主鍵的處理

    詳解mybatis plus使用insert沒(méi)有返回主鍵的處理

    這篇文章主要介紹了詳解mybatis plus使用insert沒(méi)有返回主鍵的處理,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • Spring Boot部署到Tomcat過(guò)程中遇到的問(wèn)題匯總

    Spring Boot部署到Tomcat過(guò)程中遇到的問(wèn)題匯總

    這篇文章主要給大家分享了關(guān)于Spring Boot部署到Tomcat過(guò)程中遇到的一些問(wèn)題,文中將解決的方法介紹非常詳細(xì),對(duì)同樣遇到這個(gè)問(wèn)題的朋友具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-03-03
  • Java實(shí)現(xiàn)評(píng)論回復(fù)功能的完整步驟

    Java實(shí)現(xiàn)評(píng)論回復(fù)功能的完整步驟

    這篇文章主要給大家介紹了關(guān)于Java實(shí)現(xiàn)評(píng)論回復(fù)功能的完整步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • java編程多線程并發(fā)處理實(shí)例解析

    java編程多線程并發(fā)處理實(shí)例解析

    這篇文章主要介紹了java編程多線程并發(fā)處理實(shí)例解析,分享了相關(guān)代碼示例,小編覺(jué)得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-01-01
  • mybatis的if判斷integer問(wèn)題

    mybatis的if判斷integer問(wèn)題

    這篇文章主要介紹了mybatis的if判斷integer問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • java  文件鎖的簡(jiǎn)單實(shí)現(xiàn)

    java 文件鎖的簡(jiǎn)單實(shí)現(xiàn)

    這篇文章主要介紹了java 文件鎖的簡(jiǎn)單實(shí)現(xiàn)的相關(guān)資料,需要的朋友可以參考下
    2017-07-07
  • java實(shí)現(xiàn)簡(jiǎn)單的爬蟲(chóng)之今日頭條

    java實(shí)現(xiàn)簡(jiǎn)單的爬蟲(chóng)之今日頭條

    最近在學(xué)習(xí)搜索方面的東西,需要了解網(wǎng)絡(luò)爬蟲(chóng)方面的知識(shí),雖然有很多開(kāi)源的強(qiáng)大的爬蟲(chóng),但本著學(xué)習(xí)的態(tài)度,想到之前在做資訊站的時(shí)候需要用到爬蟲(chóng)來(lái)獲取一些文章,今天剛好有空就研究了一下.在網(wǎng)上看到了一個(gè)demo,使用的是Jsoup,我拿過(guò)來(lái)修改了一下,有需要的朋友可以參考
    2016-11-11
  • 詳解Java中-classpath和路徑的使用

    詳解Java中-classpath和路徑的使用

    本篇文章主要介紹了Java中-classpath和路徑的使用,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-04-04

最新評(píng)論