Java併發 JAVA併發程式設計實戰 讀書筆記3

2021-07-23 16:42:39 字數 1263 閱讀 9490

發布乙個物件的意思是使它能夠被當前範圍之外的**所使用。比如將乙個引用儲存到其他**可以訪問的地方,在乙個非私有的方法中返回這個引用。在很多情況下,我們需要確保物件及它們的內部狀態不被暴露。乙個物件在尚未準備好時就將它發布,稱作逸出。

最常見的發布物件的方式就是將物件的引用儲存到公共靜態域中,任何類和執行緒都能看到這個域。

public static setknownsecrets;

public void initialize()

發布乙個物件還會間接地發布其他物件。比如上面例子中加入

set的

secret

物件。類似的,從非私有方法中返回引用,也能發布返回的物件。

class unsafestates;

public string getstates()

}

上面的例子中,

states

已經變成公有的了。

public class thisescape});

}}

上面的例子演示了

this

引用在構造時逸出,一定要避免。

在建構函式中呼叫乙個可覆蓋的例項方法同樣會導致this

引用在構造期間逸出。

如果需要在建構函式中註冊***或啟動執行緒,可以使用乙個私有的建構函式和乙個公共的工廠方法。

public class safelistener}}

public static safelistener newinstance(eventsource source)

}

乙個可以避免同步的方式就是不共享資料。如果資料僅在單執行緒中被訪問,就不需要任何同步。執行緒封閉技術是實現執行緒安全的最簡單的方式之一。當物件封閉在乙個執行緒中時,這種做法是執行緒安全的,即使被封閉的物件本身不是執行緒安全的。

swing的視覺化元件和資料模型物件並不是執行緒安全的。通過將他們限制到

swing

的事件分發執行緒中,實現執行緒安全的。

另一種常見的使用執行緒限制的應用程式是應用池化的jdbc

,這種連線管理模式隱式地將

connection

物件限制在處於請求處理期間的執行緒中。

pulbic int loadtheark(collectioncandidates)

}return numpairs;

}

Java併發 ReentrantLock實現分析

reentrantlock是基於aqs實現的可重入獨佔鎖,如果還不了解aqs實現原理的同學可以先去aqs原理分析學習一哈。如果文章中由任何不妥或者謬誤之處,請批評指正。2.公平鎖 3.解鎖過程 reentrantlock核心功能的實現,依賴於繼承aqs類實現的同步器。reentrantlock有三個...

JAVA併發程式設計

通過常量字串 string 來呼叫 wait 或 notify 方法所導致的問題是,jvm 編譯器會在內部自動將內容相同的 string 轉變為相同的物件。這意味著,即便你建立了兩個不同的 mywaitnotify 例項,他們內部的 mymonitorobject 變數也會指向相同的 string ...

Java併發程式設計

執行緒之間通訊 1.加鎖 object.wait 釋放鎖 object.notify 與sychronized 聯合使用,object lock new object sychronized lock sychronized lock 2.改進 無需加鎖並發包下 countdownlatch.awa...