下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、java編程的總結(jié)與思考java編程的總結(jié)與思考編寫優(yōu)質(zhì)的并發(fā)代碼是一件難度極高的事情。Java語言從第一 版本開始內(nèi)置了對多線程的支持,這一點在當年是非常了不起的, 但是當我們對并發(fā)編程有了更深刻的認識和更多的實踐后,實現(xiàn)并 發(fā)編程就有了更多的方案和更好的選擇。本文是對并發(fā)編程的一點 總結(jié)和思考,為什么需要并發(fā)并發(fā)其實是一種解耦合的策略,它幫助我們把做什么(目標)和什 么時候做(時機)分開。這樣做可以明顯改進應(yīng)用程序的吞吐量(獲得 更多的CPU調(diào)度時間)和結(jié)構(gòu)(程序有多個部分在協(xié)同工作)。做過 JavaWeb開發(fā)的人都知道,JavaWeb中的Servlet程序在Servlet容 器的支持下采
2、用單實例多線程的工作模式,Servlet容器幫助你處 理了并發(fā)請求的問題。誤解和正解最常見的對并發(fā)編程的誤解有以下這些:A. 并發(fā)總能改進性能。(真相:并發(fā)在CPU有很多空閑時間時能 明顯改進程序的性能,但當線程數(shù)量較多的時候,線程間頻繁的調(diào) 度切換反而會讓系統(tǒng)的性能下降)B. 編寫并發(fā)程序無需修改原有的設(shè)計。(真相:目的與時機的解 耦往往會對系統(tǒng)結(jié)構(gòu)產(chǎn)生巨大的影響)C. 在使用Web或EJB容器時不用關(guān)注并發(fā)問題。(真相:只有了 解了容器在做什么,才能更好的使用容器)下而的這些說法才是對并發(fā)編程比較客觀的認識:A. 編寫并發(fā)程序會在代碼上增加額外的開銷。B. 正確的并發(fā)是非常復(fù)雜的,即使對于
3、很簡單的問題。C. 并發(fā)中的缺陷因為不易重現(xiàn)也不容易被發(fā)現(xiàn)。D. 并發(fā)往往需要對設(shè)計策略從根木上進行修改。并發(fā)編程的原則和技巧1. 單一職責原則:分離并發(fā)相關(guān)代碼和其他代碼(并發(fā)相關(guān)代碼 有自己的開發(fā)、修改和調(diào)優(yōu)生命周期)。2. 限制數(shù)據(jù)作用域:兩個線程修改共享對象的同一字段時可能會 相互干擾,導(dǎo)致不可預(yù)期的行為,解決方案之一是構(gòu)造臨界區(qū),但 是必須限制臨界區(qū)的數(shù)量。下面的這些說法才是對并發(fā)客觀的認識:-編寫并發(fā)程序會在代碼上增加額外的開銷-正確的并發(fā)是非常復(fù) 雜的,即使對于很簡單的問題-并發(fā)中的缺陷因為不易重現(xiàn)也不容易 被發(fā)現(xiàn)-并發(fā)往往需要對設(shè)計策略從根本上進行修改并發(fā)編程的原則和 技巧單一
4、職責原則分離并發(fā)相關(guān)代碼和其他代碼(并發(fā)相關(guān)代碼有自 己的開發(fā)、修改和調(diào)優(yōu)生命周期)。限制數(shù)據(jù)作用域兩個線程修改共 享對象的同一字段時可能會相互干擾,導(dǎo)致不可預(yù)期的行為,解決 方案之一是構(gòu)造臨界區(qū),但是必須限制臨界區(qū)的數(shù)量。使用數(shù)據(jù)副 木數(shù)據(jù)副木是避免共享數(shù)據(jù)的好方法,復(fù)制出來的對象只是以只讀 的方式對待。Java5 的 java. util, concurrent 包中增加一個名為 CopyOnWriteArrayList的類,它是List接口的子類型,所以你可 以認為它是ArrayList的線程安全的版本,它使用了寫時復(fù)制的方 式創(chuàng)建數(shù)據(jù)副本進行操作來避免對共享數(shù)據(jù)并發(fā)訪問而引發(fā)的問題。
5、線程應(yīng)盡可能獨立讓線程存在于自己的世界中,不與其他線程共享 數(shù)據(jù)。有過JavaWeb開發(fā)經(jīng)驗的人都知道,Servlet就是以單實例 多線程的方式工作,和每個請求相關(guān)的數(shù)據(jù)都是通過Servlet子類 的service方法(或者是doGet或doPost方法)的參數(shù)傳入的。只要 Servlet中的代碼只使用局部變量,Servlet就不會導(dǎo)致同步問題。springMVC的控制器也是這么做的,從請求中獲得的對象都是以 方法的參數(shù)傳入而不是作為類的成員,很明顯Struts2的做法就正 好相反,因此Struts2中作為控制器的Action類都是每個請求對應(yīng) 一個實例。Java5以前的并發(fā)編程Java的線程
6、模型建立在搶占式線 程調(diào)度的基礎(chǔ)上,也就是說:所有線程可以很容易的共享同一進程 中的對象。能夠引用這些對象的任何線程都可以修改這些對象。為 了保護數(shù)據(jù),對象可以被鎖住。Java基于線程和鎖的并發(fā)過于底層, 而且使用鎖很多時候都是很萬惡的,因為它相當于讓所有的并發(fā)都 變成了排隊等待。在Java5以前,可以用synchronized關(guān)鍵字來實現(xiàn)鎖的功能, 它可以用在代碼塊和方法上,表示在執(zhí)行整個代碼塊或方法之前線 程必須取得合適的鎖。對于類的非靜態(tài)方法(成員方法)而言,這意 味這要取得對象實例的鎖,對于類的靜態(tài)方法(類方法)而言,要取 得類的Class對象的鎖,對于同步代碼塊,程序員可以指定要取得
7、 的是那個對象的鎖。不管是同步代碼塊還是同步方法,每次只有一 個線程可以進入,如果其他線程試圖進入(不管是同一同步塊還是不 同的同步塊),JVM會將它們掛起(放入到等鎖池中)。這種結(jié)構(gòu)在并 發(fā)理論中稱為臨界區(qū)(critical sect ion)。這里我們可以對Java中用synchronized實現(xiàn)同步和鎖的功能做 一個總結(jié):只能鎖定對象,不能鎖定基本數(shù)據(jù)類型被鎖定的對象數(shù) 組中的單個對象不會被鎖定同步方法可以視為包含整個方法的 synchronized (this) 代碼塊靜態(tài)同步方法會鎖定它的Class對 象內(nèi)部類的同步是獨立于外部類的synchronized修飾符并不是方法 簽名的組成
8、部分,所以不能出現(xiàn)在接口的方法聲明中非同步的方法 不關(guān)心鎖的狀態(tài),它們在同步方法運行時仍然可以得以運行 synchronized實現(xiàn)的鎖是可重入的鎖。在JVM內(nèi)部,為了提高效率, 同時運行的每個線程都會有它正在處理的數(shù)據(jù)的緩存副本,當我們 使用synchronzied進行同步的時候,真正被同步的是在不同線程中 表示被鎖定對象的內(nèi)存塊(副木數(shù)據(jù)會保持和主內(nèi)存的同步,現(xiàn)在知 道為什么要用同步這個詞匯了吧),簡單的說就是在同步塊或同步方 法執(zhí)行完后,對被鎖定的對象做的任何修改要在釋放鎖之前寫回到 主內(nèi)存中;在進入同步塊得到鎖之后,被鎖定對象的數(shù)據(jù)是從主內(nèi)存 中讀出來的,持有鎖的線程的數(shù)據(jù)副本一定和主內(nèi)存中的數(shù)據(jù)視圖 是同步的。在Java最初的版本中,就有一個叫Volat訂e的關(guān)鍵字, 它是一種簡單的同步的處理機制,因為被volatile修飾的變量遵循 以下規(guī)則:變量的值在使用之前總會從主內(nèi)存中再讀取出來。對
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度水利設(shè)施測繪地理信息服務(wù)合同4篇
- 2025年度鋁合金門窗行業(yè)知識產(chǎn)權(quán)保護與運營合同
- 2025年度龍門吊安全操作及維護租賃服務(wù)合同范本4篇
- 2025年水資源項目管理法規(guī)與水環(huán)境保護合同3篇
- 2025年度煤場土地租賃及資源開發(fā)合同范本4篇
- 2025年校園小賣部可持續(xù)發(fā)展戰(zhàn)略合作合同3篇
- 2025年版數(shù)字經(jīng)濟產(chǎn)業(yè)股東入股合同2篇
- 2025年度高端定制家具場購銷合同書4篇
- 二零二五版辦公設(shè)備報廢回收處理合同2篇
- 2025年度健康食品全國總代理合同范本4篇
- 2025年河南鶴壁市政務(wù)服務(wù)和大數(shù)據(jù)管理局招聘12345市長熱線人員10人高頻重點提升(共500題)附帶答案詳解
- 建設(shè)項目安全設(shè)施施工監(jiān)理情況報告
- 春節(jié)期間安全施工措施
- 2025年大唐集團招聘筆試參考題庫含答案解析
- 建筑工地春節(jié)期間安全保障措施
- 2025山東水發(fā)集團限公司招聘管理單位筆試遴選500模擬題附帶答案詳解
- 2024-2030年中國建筑玻璃行業(yè)市場深度調(diào)研及競爭格局與投資價值預(yù)測研究報告
- 泌尿:膀胱腫瘤病人的護理查房王雪-課件
- 企業(yè)短期中期長期規(guī)劃
- 路面彎沉溫度修正系數(shù)
- 藥店員工教育培訓(xùn)資料
評論
0/150
提交評論