并發(fā)是一種解耦策略,它幫助我們把做什么(目的)和何時(shí)(時(shí)機(jī))做分解開惕澎。在單線程應(yīng)用中莉测,目的與時(shí)機(jī)緊密耦合,很多時(shí)候只要查看堆棧追蹤即可斷定應(yīng)用程序的狀態(tài)唧喉。而解耦目的與時(shí)機(jī)能明顯地改進(jìn)應(yīng)用程序的吞吐量和結(jié)構(gòu)捣卤。從結(jié)構(gòu)的角度看,應(yīng)用程序看起來更像是許多臺協(xié)同工作的計(jì)算機(jī),而不是一個(gè)大循環(huán)八孝。單線程程序許多時(shí)間花在等待Web套接字I/O結(jié)束上面董朝。
下面是一些有關(guān)編寫并發(fā)軟件的中肯的說法: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?并發(fā)會(huì)在性能和編寫額外代碼上增加一些開銷。 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 正確的并發(fā)是復(fù)雜的干跛,即使對于簡單的問題也是如此子姜。 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?并發(fā)缺陷并非總能重現(xiàn),所以常被看做偶發(fā)事件而忽略楼入,而未被當(dāng)做真的缺陷看待哥捕。 ? ? ? ? ? 并發(fā)常常需要對設(shè)計(jì)策略的根本性修改。
下面給出一些防御并發(fā)代碼問題的原則和技巧: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?單一權(quán)責(zé)原則(分離并發(fā)代碼和其他代碼) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?限制數(shù)據(jù)作用域(謹(jǐn)記數(shù)據(jù)封裝即臨界區(qū)嘉熊,嚴(yán)格限制對可能被共享的數(shù)據(jù)的訪問) ? ? ? ? ? ? ? ? ? ?使用數(shù)據(jù)復(fù)本 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?線程應(yīng)盡可能地獨(dú)立 ? ?
了解Java庫遥赚,保證線程安全掌握 java.util.concurrent、java.util.concurrent.atomic和java.util.concurrent.locks.
了解執(zhí)行模型的一些基礎(chǔ)定義:
在并發(fā)編程中用到的幾種執(zhí)行模型:
1)生產(chǎn)者-消費(fèi)者模型 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 一個(gè)或多個(gè)生產(chǎn)者線程創(chuàng)建某些工作记舆,并置于緩存或者隊(duì)列中鸽捻。一個(gè)或者多個(gè)消費(fèi)者線程從隊(duì)列中獲取并完成這些工作。生產(chǎn)者和消費(fèi)者之間的隊(duì)列是一種限定資源泽腮。
2)讀者-作者模型御蒲。 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 當(dāng)存在一個(gè)主要為讀者線程提供信息源,但只是偶爾被作者線程更新的共享資源诊赊,吞吐量就會(huì)是個(gè)問題厚满。增加吞吐量,會(huì)導(dǎo)致線程饑餓和過時(shí)信息的積累碧磅。協(xié)調(diào)讀者線程不去讀取正在更新的信息碘箍,而作者線程傾向于長期鎖定讀者線程遵馆。
3)宴席哲學(xué)家。 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 許多企業(yè)級應(yīng)用中會(huì)存在進(jìn)程競爭資源的情形丰榴,如果沒有用心設(shè)計(jì)货邓,這種競爭會(huì)遭遇死鎖,活鎖四濒,吞吐量和效率低等問題换况。
PS:代碼整潔之道對并發(fā)的講解還不是那么的清晰,要掌握怎么正確使用并發(fā)盗蟆,自己還是需要去專門看看這方面的書戈二。