Java 多線程程序的評(píng)價(jià)標(biāo)準(zhǔn)

作者:HaigLee
http://www.reibang.com/u/67ec21fb270d
本文由 HaigLee 發(fā)布塑煎。未經(jīng)許可墩瞳,禁止轉(zhuǎn)載查吊。

一個(gè)程序的好與壞需要有一個(gè)評(píng)判標(biāo)準(zhǔn)通惫,那這個(gè)標(biāo)準(zhǔn)是什么呢鼻忠?下面我們來探討一下這個(gè)問題:

安全性——不損壞對(duì)象

所謂安全性(safety)就是不損壞對(duì)象服鹅。這是程序運(yùn)行的必要條件之一凳兵。

對(duì)象的損壞只是一種比喻,實(shí)際上企软,對(duì)象是存儲(chǔ)上的一種虛擬事物庐扫,并不會(huì)實(shí)際損壞。對(duì)象損壞是指對(duì)象的狀態(tài)和設(shè)計(jì)者的原意不一致仗哨,通常指對(duì)象的值并非預(yù)期的值形庭。

如果一個(gè)類即使被多個(gè)線程同時(shí)使用,也可以確保安全性藻治,那么這個(gè)類就稱為線程安全(thread-safe)類碘勉。由于類庫中還存在著非線程安全的類,所以在多線程程序中使用類時(shí)一定要特別注意桩卵。例如:java.until.Vector類就是線程安全的類验靡,而java.until.ArrayList則是非線程安全的類。一般在API文檔中能夠查到各個(gè)類是否是線程安全的雏节。

生存性——必要的處理能夠被執(zhí)行

生存性(liveness)是指無論在什么時(shí)候胜嗓,必要的處理都一定能夠被執(zhí)行。這也是程序正常運(yùn)行的必要條件之一钩乍。

即使對(duì)象沒有損壞辞州,也不代表程序就一定好。極端一點(diǎn)說寥粹,假如程序在運(yùn)行過程中突然停止了变过,這時(shí)候,由于處理已經(jīng)停止涝涤,對(duì)象的狀態(tài)就不會(huì)發(fā)生變化了媚狰,所以對(duì)象的狀態(tài)也就不會(huì)異常。這雖然符合前面講的安全性的條件阔拳,但無法運(yùn)行的程序根本沒有任何意義崭孤。無論是什么時(shí)候,必要的處理一定能夠被執(zhí)行——這就是生存性。

有時(shí)候辨宠,安全性和生存性會(huì)互相制約遗锣。最典型的示例就是死鎖(deadlock),即多個(gè)線程互相等待對(duì)方釋放鎖的情形嗤形。

可復(fù)用性——類可以復(fù)制利用

可復(fù)用性(reusability)是指類能夠復(fù)制利用精偿。這雖然不是程序正常運(yùn)行的必要條件,但卻是提高程序質(zhì)量的必要條件赋兵。

類如果能夠作為組件從正常運(yùn)行的軟件中分割出來还最,那么就說明這個(gè)類有很高的可復(fù)用性。

在編寫多線程程序時(shí)毡惜,如果能夠巧妙的將線程的互斥機(jī)制和方針隱藏到類中,那這就是一個(gè)可復(fù)用性高的程序斯撮。java.util.concurrent包中就提供了便于多線程編程的可復(fù)用性高的程序经伙。

性能——整快速、大批量地執(zhí)行處理

性能(performance)是指能快速勿锅、大批量的執(zhí)行處理帕膜。這也不是程序正常運(yùn)行的必要條件,但卻是提高程序質(zhì)量時(shí)應(yīng)該考慮的條件溢十。

影響性能的因素有好多種垮刹。下面是從Doug Lea 的性能分類中摘錄出的主要部分。

  • 吞吐量(throughput):是指單位時(shí)間內(nèi)完成的處理數(shù)量张弛。能夠完成的處理越多荒典,則表示吞吐量越大。

  • 響應(yīng)性(responsiveness):是指從發(fā)出請(qǐng)求到收到響應(yīng)的時(shí)間吞鸭。時(shí)間越短寺董,響應(yīng)性也就越好。在GUI程序中刻剥,相比于到處理“結(jié)束”時(shí)的時(shí)間遮咖,到處理“開始”時(shí)的時(shí)間更為重要。前者是指實(shí)際處理所花費(fèi)的時(shí)間造虏,而后者是到程序開始響應(yīng)用戶所花費(fèi)的時(shí)間御吞。相比于按下按鈕后無任何反應(yīng),10秒后才提示“處理完畢”這種方式漓藕,在按下按鈕時(shí)應(yīng)立刻提示“處理開始”這種方式的響應(yīng)性更高陶珠,即便是到處理結(jié)束花費(fèi)的時(shí)間多一點(diǎn)也沒有任何關(guān)系。響應(yīng)性好也稱為等待時(shí)間(latency)短撵术。

  • 容量(capacity):是指可同時(shí)進(jìn)行的處理數(shù)量背率。例如服務(wù)器能同時(shí)處理的客戶端數(shù)或文件數(shù)等。

其它的諸如效率(efficiency)、可伸縮性(scalability)寝姿、降級(jí)(degradation)等交排,也可作為性能的評(píng)價(jià)標(biāo)準(zhǔn)。

有時(shí)候饵筑,這些要素之間是互相制約的埃篓。例如,如果要提高吞吐量根资,那么在很多情況下架专,程序的響應(yīng)性就會(huì)下降。如果要提高安全性玄帕,那么性能就有可能會(huì)下降(如吞吐量變胁拷拧)。

總結(jié)

安全性和生存性是必須遵守的標(biāo)準(zhǔn)裤纹。在此基礎(chǔ)上委刘,考慮如何提高可復(fù)用性和性能。

作者:HaigLee
http://www.reibang.com/u/67ec21fb270d
本文由 HaigLee 發(fā)布鹰椒。未經(jīng)許可锡移,禁止轉(zhuǎn)載。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末漆际,一起剝皮案震驚了整個(gè)濱河市淆珊,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌奸汇,老刑警劉巖施符,帶你破解...
    沈念sama閱讀 218,036評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異擂找,居然都是意外死亡操刀,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門婴洼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來骨坑,“玉大人,你說我怎么就攤上這事柬采』锻伲” “怎么了?”我有些...
    開封第一講書人閱讀 164,411評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵粉捻,是天一觀的道長礁遣。 經(jīng)常有香客問我,道長肩刃,這世上最難降的妖魔是什么祟霍? 我笑而不...
    開封第一講書人閱讀 58,622評(píng)論 1 293
  • 正文 為了忘掉前任杏头,我火速辦了婚禮,結(jié)果婚禮上沸呐,老公的妹妹穿的比我還像新娘醇王。我一直安慰自己,他們只是感情好崭添,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,661評(píng)論 6 392
  • 文/花漫 我一把揭開白布寓娩。 她就那樣靜靜地躺著,像睡著了一般呼渣。 火紅的嫁衣襯著肌膚如雪棘伴。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,521評(píng)論 1 304
  • 那天屁置,我揣著相機(jī)與錄音焊夸,去河邊找鬼。 笑死蓝角,一個(gè)胖子當(dāng)著我的面吹牛淳地,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播帅容,決...
    沈念sama閱讀 40,288評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼伍伤!你這毒婦竟也來了并徘?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,200評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤扰魂,失蹤者是張志新(化名)和其女友劉穎麦乞,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體劝评,經(jīng)...
    沈念sama閱讀 45,644評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡姐直,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,837評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蒋畜。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片声畏。...
    茶點(diǎn)故事閱讀 39,953評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖姻成,靈堂內(nèi)的尸體忽然破棺而出插龄,到底是詐尸還是另有隱情,我是刑警寧澤科展,帶...
    沈念sama閱讀 35,673評(píng)論 5 346
  • 正文 年R本政府宣布均牢,位于F島的核電站,受9級(jí)特大地震影響才睹,放射性物質(zhì)發(fā)生泄漏徘跪。R本人自食惡果不足惜甘邀,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,281評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望垮庐。 院中可真熱鬧松邪,春花似錦、人聲如沸突硝。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽解恰。三九已至锋八,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間护盈,已是汗流浹背挟纱。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留腐宋,地道東北人紊服。 一個(gè)月前我還...
    沈念sama閱讀 48,119評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像胸竞,于是被迫代替她去往敵國和親欺嗤。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,901評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 前言:雖然自己平時(shí)都在用多線程卫枝,也能完成基本的工作需求煎饼,但總覺得,還是對(duì)線程沒有一個(gè)系統(tǒng)的概念校赤,所以吆玖,查閱了一些資...
    justCode_閱讀 708評(píng)論 0 9
  • Java SE 基礎(chǔ): 封裝、繼承马篮、多態(tài) 封裝: 概念:就是把對(duì)象的屬性和操作(或服務(wù))結(jié)合為一個(gè)獨(dú)立的整體沾乘,并盡...
    Jayden_Cao閱讀 2,109評(píng)論 0 8
  • 林炳文Evankaka原創(chuàng)作品。轉(zhuǎn)載自http://blog.csdn.net/evankaka 本文主要講了ja...
    ccq_inori閱讀 654評(píng)論 0 4
  • 回憶篇第1章浑测、噩耗 人間正屬四月芳菲翅阵,落英繽紛時(shí)節(jié),轉(zhuǎn)眼千年迁央,感嘆世間物是人非怎顾,曾經(jīng)的蠻荒禁地,成了仙凡兩界修仙人...
    靈舞閱讀 227評(píng)論 0 0
  • 考研與工作漱贱,這是一個(gè)歷史遺留問題;人生命短槐雾,用Python也解不開的謎團(tuán)。不幸的是我只能選擇其一幅狮,也必須選擇其一;...
    IWillGo閱讀 584評(píng)論 2 2