2 回答

TA貢獻(xiàn)1866條經(jīng)驗(yàn) 獲得超5個(gè)贊
重入讀寫鎖是實(shí)現(xiàn)您的想法的最佳方式。如果兩個(gè)或多個(gè)線程嘗試讀取計(jì)數(shù),則 synced 將只允許一個(gè)線程。但是,當(dāng)他們都嘗試閱讀計(jì)數(shù)時(shí),每個(gè)人都可以獲得計(jì)數(shù)的值。

TA貢獻(xiàn)1801條經(jīng)驗(yàn) 獲得超8個(gè)贊
您的兩種解決方案都可以工作,但是您在實(shí)現(xiàn)鎖定的方式中存在一個(gè)錯(cuò)誤。
首先是兩種方法的區(qū)別:重入式讀寫鎖定主要用于以下情況:讀取次數(shù)多于通常為 10 次讀取 :1 次寫入的寫入操作。這允許同時(shí)進(jìn)行讀取而不會(huì)相互阻塞,但是當(dāng)寫入開始時(shí),所有讀取都將被阻止。因此,性能是主要原因。
方法中的錯(cuò)誤:要鎖定的對(duì)象應(yīng)該是最終的。在 setCount() 中,您有效地交換了對(duì)象,這可能會(huì)導(dǎo)致此時(shí)的臟讀。
此外,切勿公開要鎖定的對(duì)象。要鎖定的對(duì)象應(yīng)該是私有的和最終的。原因是,如果您碰巧公開了該對(duì)象,則調(diào)用方可能會(huì)碰巧使用返回的對(duì)象本身進(jìn)行鎖定,在這種情況下,您將遇到與此類本身外部的組件的爭(zhēng)用問(wèn)題。
添加回答
舉報(bào)