依據(jù)情況的不同创南,過度同步可能會導(dǎo)致性能降低伦忠、死鎖,甚至不確定的行為稿辙。
為了避免活性失敗和安全性失敗昆码,在一個被同步的方法或者代碼塊中,永遠不要放棄對客戶端的控制邻储。換句話說赋咽,在一個被同步的區(qū)域內(nèi)部,不要調(diào)用設(shè)計成要被覆蓋的方法吨娜,或者是由客戶端以函數(shù)對象的形式提供的方法脓匿。從包含該同步區(qū)域的角度來看,這樣的方法是外來的(alien)宦赠。這個類不知道該方法會做什么事情陪毡,也無法控制它。根據(jù)外來方法的作用袱瓮,從同步區(qū)域中調(diào)用它會導(dǎo)致異常缤骨、死鎖或者數(shù)據(jù)損壞。通常尺借,你應(yīng)該在同步區(qū)域內(nèi)做盡可能少的工作绊起。
如果一個可變類要并發(fā)使用,應(yīng)該使這個類變成線程安全的燎斩,通過內(nèi)部同步虱歪,你還可以獲得明顯比外部鎖定整個對象更高的并發(fā)性。否則栅表,就不要在內(nèi)部同步笋鄙。讓客戶在必要的時候從外部同步。(StringBuffer實例幾乎總是被用于單個線程中怪瓶,而它們執(zhí)行的卻是內(nèi)部同步萧落。因此,這種StringBuffer都應(yīng)該用StringBuilder代替。)
簡而言之找岖,為了避免死鎖和數(shù)據(jù)破壞陨倡,千萬不要從同步區(qū)域內(nèi)部調(diào)用外來方法。更為一般地講许布,要盡量限制同步區(qū)域內(nèi)部的工作量兴革。當你在設(shè)計一個可變類的時候,要考慮一下它們是否應(yīng)該自己完成同步操作蜜唾。在現(xiàn)在這個多核的時代杂曲,這比永遠不要過度同步來得更重要。只有當你有足夠的理由一定要在內(nèi)部同步類的時候袁余,才應(yīng)該這么做擎勘,同時還應(yīng)該將這個決定清楚地寫到文檔中。
第67條 避免過度同步
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
- 文/潘曉璐 我一進店門缅疟,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人遍愿,你說我怎么就攤上這事存淫。” “怎么了沼填?”我有些...
- 文/不壞的土叔 我叫張陵桅咆,是天一觀的道長。 經(jīng)常有香客問我坞笙,道長岩饼,這世上最難降的妖魔是什么? 我笑而不...
- 正文 為了忘掉前任薛夜,我火速辦了婚禮籍茧,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘梯澜。我一直安慰自己寞冯,他們只是感情好,可當我...
- 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著吮龄,像睡著了一般俭茧。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上螟蝙,一...
- 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼奴迅!你這毒婦竟也來了青责?” 一聲冷哼從身側(cè)響起,我...
- 正文 年R本政府宣布藻烤,位于F島的核電站,受9級特大地震影響肛捍,放射性物質(zhì)發(fā)生泄漏隐绵。R本人自食惡果不足惜,卻給世界環(huán)境...
- 文/蒙蒙 一拙毫、第九天 我趴在偏房一處隱蔽的房頂上張望依许。 院中可真熱鬧,春花似錦缀蹄、人聲如沸峭跳。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽蛀醉。三九已至悬襟,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間拯刁,已是汗流浹背脊岳。 一陣腳步聲響...
推薦閱讀更多精彩內(nèi)容
- java 接口的意義-百度 規(guī)范、擴展召锈、回調(diào) 抽象類的意義-樂視 為其子類提供一個公共的類型封裝子類中得重復(fù)內(nèi)容定...
- 前言 做Android開發(fā)這么多年,見過很多人寫的代碼(開源代碼除外)瓦戚,其中有的寫的代碼很簡潔沮尿、很漂亮,讓人看起來...