国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

看java并發編程實戰 Synchronized 的一點思考

Tonny / 444人閱讀

摘要:看并發編程實戰第章程序清單附件時對于下面的話如何理解我的理解是方法等同于他是對上的鎖,也只能保證同一時刻只有一個線程可以訪問同一實例的方法。的是對進行上鎖,因此任何訪問的線程安全的方法,同一時刻只能有一個線程進行。

看《java 并發編程實戰》 第4章 程序清單4-14附件時

class BadListHelper {

public List list = Collections.synchronizedList(new ArrayList());

public synchronized boolean putIfAbsent(E x) {
    boolean absent = !list.contains(x);
    if (absent)
        list.add(x);
    return absent;
}

}

@ThreadSafe
class GoodListHelper {

public List list = Collections.synchronizedList(new ArrayList());

public boolean putIfAbsent(E x) {
    synchronized (list) {
        boolean absent = !list.contains(x);
        if (absent)
            list.add(x);
        return absent;
    }
}

}

對于BadListHelper 下面的話如何理解?

我的理解是:
public synchronized boolean putIfAbsent(E x)方法等同于
public boolean putIfAbsent(E x){
synchronized (this){

  ....

}
}

他是對BadListHelper 上的鎖,也只能保證同一時刻只有一個線程可以訪問BadListHelper 同一實例的putIfAbsent方法。但是持有list的引用的其它線程任然可以使用list其它方法修改list(即使該方法對應list來說是線程安全的、原子的); 但是我們的目的是 為了同一時刻只能有一個線程可以修改list。 因此書上說 “問題在于錯誤的鎖上進行了同步” 。

GoodListHelper 的putIfAbsent是對list進行上鎖,因此任何訪問list的線程安全的方法,同一時刻只能有一個線程進行。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/67056.html

相關文章

  • 初學者福音!可能是最適合你的Java學習路線和方法推薦。

    摘要:學習完多線程之后可以通過下面這些問題檢測自己是否掌握,下面這些問題的答案以及常見多線程知識點的總結在這里??蛇x數據結構與算法如果你想進入大廠的話,我推薦你在學習完基礎或者多線程之后,就開始每天抽出一點時間來學習算法和數據結構。 我自己總結的Java學習的系統知識點以及面試問題,已經開源,目前已經 35k+ Star。會一直完善下去,歡迎建議和指導,同時也歡迎Star: https://...

    yanest 評論0 收藏0
  • Java 重入鎖 ReentrantLock 原理分析

    摘要:的主要功能和關鍵字一致,均是用于多線程的同步。而僅支持通過查詢當前線程是否持有鎖。由于和使用的是同一把可重入鎖,所以線程可以進入方法,并再次獲得鎖,而不會被阻塞住。公平與非公平公平與非公平指的是線程獲取鎖的方式。 1.簡介 可重入鎖ReentrantLock自 JDK 1.5 被引入,功能上與synchronized關鍵字類似。所謂的可重入是指,線程可對同一把鎖進行重復加鎖,而不會被阻...

    lx1036 評論0 收藏0
  • 【轉】成為Java頂尖程序員 ,這10本書就夠了

    摘要:實戰高并發程序設計這本書是目前點評推薦比較多的書,其特色是案例小,好實踐代碼有場景,實用。想要學習多線程的朋友,這本書是我大力推薦的,我的個人博客里面二十多篇的多線程博文都是基于此書,并且在這本書的基礎上進行提煉和總結而寫出來的。 學習的最好途徑就是看書,這是我自己學習并且小有了一定的積累之后的第一體會。個人認為看書有兩點好處:showImg(/img/bVr5S5);  1.能出版出...

    DTeam 評論0 收藏0
  • 【J2SE】java并發編程實戰 讀書筆記( 一、二、三章)

    摘要:發布的對象內部狀態可能會破壞封裝性,使程序難以維持不變性條件。不變性線程安全性是不可變對象的固有屬性之一。可變對象必須通過安全方式來發布,并且必須是線程安全的或者有某個鎖保護起來。 線程的優缺點 線程是系統調度的基本單位。線程如果使用得當,可以有效地降低程序的開發和維護等成本,同時提升復雜應用程序的性能。多線程程序可以通過提高處理器資源的利用率來提升系統的吞吐率。與此同時,在線程的使用...

    QLQ 評論0 收藏0
  • 深入理解 Java 多線程系列(1)——一個簡單需求的并行改造 & Java多線程的通信問題

    摘要:所以接下來,我們需要簡單的介紹下多線程中的并發通信模型。比如中,以及各種鎖機制,均為了解決線程間公共狀態的串行訪問問題。 并發的學習門檻較高,相較單純的羅列并發編程 API 的枯燥被動學習方式,本系列文章試圖用一個簡單的栗子,一步步結合并發編程的相關知識分析舊有實現的不足,再實現邏輯進行分析改進,試圖展示例子背后的并發工具與實現原理。 本文是本系列的第一篇文章,提出了一個簡單的業務場景...

    ruicbAndroid 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<