摘要:對象的組合介紹一些組合模式,這些模式能夠使一個類更容易成為線程安全的,并且維護(hù)這些類時不會無意破壞類的安全性保證。狀態(tài)變量的所有者將決定采用何種加鎖協(xié)議來維持變量狀態(tài)的完整性。所有權(quán)意味著控制權(quán)。
對象的組合
介紹一些組合模式,這些模式能夠使一個類更容易成為線程安全的,并且維護(hù)這些類時不會無意破壞類的安全性保證。設(shè)計線程安全的類
在設(shè)計線程安全類的過程中,需要包含以下三個基本要素:
找出構(gòu)成對象狀態(tài)的所有變量
找出約束對象狀態(tài)的不可變性條件。
建立對象狀態(tài)的并發(fā)訪問管理策略。
收集同步需求如果不了解對象的不變性條件與后驗條件,那么就不能確保線程的安全性。要滿足在狀態(tài)變量的有效值或狀態(tài)轉(zhuǎn)換上的各種約束條件,就需要借助于原子性與分裝性。依賴狀態(tài)的操作
類的不變性條件與后驗條件約束了對象上有哪些狀態(tài)和狀態(tài)轉(zhuǎn)移轉(zhuǎn)換是有效的。在某些對象的方法中還包含一些基于狀態(tài)的先驗條件。狀態(tài)的所有權(quán)
對象封裝它擁有的狀態(tài),反之也成立,即對它封裝的狀態(tài)擁有所有權(quán)。狀態(tài)變量的所有者將決定采用何種加鎖協(xié)議來維持變量狀態(tài)的完整性。所有權(quán)意味著控制權(quán)。實例封閉 Java監(jiān)視器模式
把對象的所有可變狀態(tài)都封裝起來,并由對象自己的內(nèi)置鎖來保護(hù)。
線程的安全機制如果一個類是有多個獨立且線程安全的狀態(tài)變量組成,并且在所有的操作中都不包含無效的狀態(tài)轉(zhuǎn)換,那么可以將線程安全性委托給底層的狀態(tài)變量。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/74397.html
摘要:線程封閉當(dāng)訪問共享的可變數(shù)據(jù)時,通常需要使用同步。如果僅在單線程內(nèi)訪問數(shù)據(jù),就不要同步。這種技術(shù)成為線程封閉。棧封閉棧封閉是線程封閉的一種特例,在棧封閉中,只能通過局部變量才能訪問對象。,對象是正確創(chuàng)建的。 線程封閉 當(dāng)訪問共享的可變數(shù)據(jù)時,通常需要使用同步。一種避免使用同步的方式就是不共享數(shù)據(jù)。如果僅在單線程內(nèi)訪問數(shù)據(jù),就不要同步。這種技術(shù)成為線程封閉(Thread Confine...
摘要:無狀態(tài)的是線程安全的,當(dāng)無狀態(tài)變?yōu)橛袪顟B(tài)時就是不安全的破壞了線程的安全性,非原子性操作競態(tài)條件在并發(fā)編程中,由于不恰當(dāng)?shù)膱?zhí)行時序而出現(xiàn)的不正確結(jié)果是一種非常重要的情況,被稱之為競態(tài)條件。重入意味著獲取鎖的操作的粒度是線程,而不是調(diào)用。 這本書的內(nèi)容是什么? 本書提供了各種實用的設(shè)計規(guī)則,用于幫助開發(fā)人員創(chuàng)建安全的和高性能的并發(fā)類。 什么類是線程安全的? 當(dāng)多個線程訪問某...
摘要:對象的共享上一章介紹了如何通過同步來避免多個線程在同一時刻訪問相同的數(shù)據(jù),而本章將介紹如何共享和發(fā)布對象,從而使它們能夠安全地由多個線程同時訪問。為了確保多個線程的之間對內(nèi)存寫入操作的可見性,必須使用同步機制。 對象的共享 上一章介紹了如何通過同步來避免多個線程在同一時刻訪問相同的數(shù)據(jù),而本章將介紹如何共享和發(fā)布對象,從而使它們能夠安全地由多個線程同時訪問。 列同步代碼塊和同步方法可...
摘要:上集算法實現(xiàn)的優(yōu)點當(dāng)一個線程執(zhí)行任務(wù)失敗不影響其他線程的進(jìn)行最大限度的利用資源能提高程序的伸縮性伸縮性不修改任何代碼升級硬件就能帶來性能上的提高升級硬件帶來的性能提高明顯就是伸縮性良好的缺點代碼復(fù)雜影響閱讀性剛開始看的時候沒有正確的思路理解 ConcurrentLinkedQueue(上集) 算法實現(xiàn) CAS CAS的優(yōu)點 當(dāng)一個線程執(zhí)行任務(wù)失敗不影響其他線程的進(jìn)行 最大限度的利用...
摘要:過程是一個計算單元,計算是通過通訊來完成的。標(biāo)題的表達(dá)式里還有一個符號,表示一個無行為的過程。一個過程的是它和外部產(chǎn)生行為交互的唯一方式。所以如果兩個過程需要通過一個交互,這個必須在兩個過程中都是,其中一方用于發(fā)送,另一方用于接收。 這篇文章的標(biāo)題是一個π表達(dá)式,結(jié)尾是一段JavaScript代碼,和這個表達(dá)式的含義完全一致,或者說,完成了這個表達(dá)式的估值。 π演算(π calculu...
閱讀 3651·2021-11-23 09:51
閱讀 1995·2021-11-16 11:42
閱讀 3244·2021-11-08 13:20
閱讀 1098·2019-08-30 15:55
閱讀 2210·2019-08-30 10:59
閱讀 1242·2019-08-29 14:04
閱讀 1026·2019-08-29 12:41
閱讀 2029·2019-08-26 12:22