xylz,imxylz

          關(guān)注后端架構(gòu)、中間件、分布式和并發(fā)編程

             :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            111 隨筆 :: 10 文章 :: 2680 評(píng)論 :: 0 Trackbacks

          #

               摘要: 在JDK 5之前Java語言是靠synchronized關(guān)鍵字保證同步的,這會(huì)導(dǎo)致有鎖(后面的章節(jié)還會(huì)談到鎖)。
          鎖機(jī)制存在以下問題:
          (1)在多線程競(jìng)爭(zhēng)下,加鎖、釋放鎖會(huì)導(dǎo)致比較多的上下文切換和調(diào)度延時(shí),引起性能問題。
          (2)一個(gè)線程持有鎖會(huì)導(dǎo)致其它所有需要此鎖的線程掛起。
          (3)如果一個(gè)優(yōu)先級(jí)高的線程等待一個(gè)優(yōu)先級(jí)低的線程釋放鎖會(huì)導(dǎo)致優(yōu)先級(jí)倒置,引起性能風(fēng)險(xiǎn)。
          volatile是不錯(cuò)的機(jī)制,但是volatile不能保證原子性。因此對(duì)于同步最終還是要回到鎖機(jī)制上來。
          獨(dú)占鎖是一種悲觀鎖,synchronized就是一種獨(dú)占鎖,會(huì)導(dǎo)致其它所有需要鎖的線程掛起,等待持有鎖的線程釋放鎖。而另一個(gè)更加有效的鎖就是樂觀鎖。所謂樂觀鎖就是,每次不加鎖而是假設(shè)沒有沖突而去完成某項(xiàng)操作,如果因?yàn)闆_突失敗就重試,直到成功為止。  閱讀全文
          posted @ 2010-07-04 18:03 imxylz 閱讀(48033) | 評(píng)論 (19)編輯 收藏

               摘要: 在這個(gè)小結(jié)里面重點(diǎn)討論原子操作的原理和設(shè)計(jì)思想。
          由于在下一個(gè)章節(jié)中會(huì)談到鎖機(jī)制,因此此小節(jié)中會(huì)適當(dāng)引入鎖的概念。
          在Java Concurrency in Practice中是這樣定義線程安全的:
          當(dāng)多個(gè)線程訪問一個(gè)類時(shí),如果不用考慮這些線程在運(yùn)行時(shí)環(huán)境下的調(diào)度和交替運(yùn)行,并且不需要額外的同步及在調(diào)用方代碼不必做其他的協(xié)調(diào),這個(gè)類的行為仍然是正確的,那么這個(gè)類就是線程安全的。  閱讀全文
          posted @ 2010-07-03 20:40 imxylz 閱讀(46630) | 評(píng)論 (16)編輯 收藏

               摘要: 在這一部分開始討論數(shù)組原子操作和一些其他的原子操作。
          AtomicIntegerArray/AtomicLongArray/AtomicReferenceArray的API類似,選擇有代表性的AtomicIntegerArray來描述這些問題。
          int get(int i)
          獲取位置 i 的當(dāng)前值。很顯然,由于這個(gè)是數(shù)組操作,就有索引越界的問題(IndexOutOfBoundsException異常)。

          對(duì)于下面的API起始和AtomicInteger是類似的,這種通過方法、參數(shù)的名稱就能夠得到函數(shù)意義的寫法是非常值得稱贊的。在《重構(gòu):改善既有代碼的設(shè)計(jì)》和《代碼整潔之道》中都非常推崇這種做法。  閱讀全文
          posted @ 2010-07-02 14:19 imxylz 閱讀(48190) | 評(píng)論 (6)編輯 收藏

               摘要: 從相對(duì)簡(jiǎn)單的Atomic入手(java.util.concurrent是基于Queue的并發(fā)包,而Queue,很多情況下使用到了Atomic操作,因此首先從這里開始)。很多情況下我們只是需要一個(gè)簡(jiǎn)單的、高效的、線程安全的遞增遞減方案。注意,這里有三個(gè)條件:簡(jiǎn)單,意味著程序員盡可能少的操作底層或者實(shí)現(xiàn)起來要比較容易;高效意味著耗用資源要少,程序處理速度要快;線程安全也非常重要,這個(gè)在多線程下能保證數(shù)據(jù)的正確性。這三個(gè)條件看起來比較簡(jiǎn)單,但是實(shí)現(xiàn)起來卻難以令人滿意。
          通常情況下,在Java里面,++i或者--i不是線程安全的,這里面有三個(gè)獨(dú)立的操作:或者變量當(dāng)前值,為該值+1/-1,然后寫回新的值。在沒有額外資源可以利用的情況下,只能使用加鎖才能保證讀-改-寫這三個(gè)操作時(shí)“原子性”的。  閱讀全文
          posted @ 2010-07-01 15:21 imxylz 閱讀(65877) | 評(píng)論 (2)編輯 收藏

               摘要: 去年年底有一個(gè)Guice的研究計(jì)劃,可惜由于工作“繁忙”加上實(shí)際工作中沒有用上導(dǎo)致“無疾而終”,最終只是完成了Guice的初步學(xué)習(xí)教程,深入的研究沒有繼續(xù)進(jìn)行下去。
          最近一直用的比較多的就是java.util.concurrent(J.U.C),實(shí)際上這塊一直也沒有完全深入研究,這次準(zhǔn)備花點(diǎn)時(shí)間研究下Java里面整個(gè)并發(fā)體系。初步的設(shè)想包括比較大的方便(包括硬件、軟件、思想以及誤區(qū)等等),因此可能會(huì)持續(xù)較長的時(shí)間。這塊內(nèi)容也是Java在多線程方面引以為豪的一部分,深入這一部分不僅對(duì)整個(gè)Java體系有更深的了解,也對(duì)工作、學(xué)習(xí)的態(tài)度有多幫助。  閱讀全文
          posted @ 2010-06-30 18:09 imxylz 閱讀(69482) | 評(píng)論 (8)編輯 收藏

          posted @ 2010-06-23 10:46 imxylz 閱讀(18594) | 評(píng)論 (0)編輯 收藏

          posted @ 2010-01-31 00:00 imxylz 閱讀(19897) | 評(píng)論 (0)編輯 收藏

          posted @ 2010-01-29 16:09 imxylz 閱讀(24144) | 評(píng)論 (2)編輯 收藏

          posted @ 2010-01-29 16:05 imxylz 閱讀(21906) | 評(píng)論 (0)編輯 收藏

               摘要: 在前面的教程中我們講了Guice注入例子,在使用上具體描述了Guice的注入過程。在下面的篇幅中我們從源碼級(jí)了解了Guice的注入過程。
          我們從具體到抽象再到具體的深入了解Guice的內(nèi)部運(yùn)作機(jī)制 。
          下面一張序列圖就是描述了Guice最簡(jiǎn)單的一次注入過程。比如下面的例子是我們熟悉的。  閱讀全文
          posted @ 2010-01-08 11:46 imxylz 閱讀(28088) | 評(píng)論 (6)編輯 收藏

          posted @ 2010-01-04 23:45 imxylz 閱讀(29229) | 評(píng)論 (0)編輯 收藏

               摘要: 以前有段時(shí)間需要知道某些類在什么jar包中,這樣當(dāng)出現(xiàn)ClassNotFoundException或者NoClassDefFoundError的時(shí)候我們就可以去找這個(gè)類在什么jar包中然后去引用此jar包即可。在我們的系統(tǒng)很小的時(shí)候我恨不能都將jar包放入eclipse中,這樣借助 eclipse平臺(tái)查找類就非常方便了。包括非常有用的Ctrl+Shift+T,Ctrl+T,Reference search等等,但是當(dāng)工程多了大了的時(shí)候,上百個(gè)jar包放入eclipse中那個(gè)速度完全不是我能忍受的,稍微動(dòng)一下就看到CPU一直在那抖動(dòng)。好吧,用maven,更慢,簡(jiǎn)直受不了,所以大多數(shù)時(shí)候Maven是一個(gè)比較好的批處理工具,和UI結(jié)合起來還不是很好用。

          我發(fā)現(xiàn)我非常需要這個(gè)從jar包中尋找類的功能,我只需要看看我的類在什么地方而已,僅次而已!于是自己就寫了一個(gè)類查找器。非常簡(jiǎn)單就是遍歷所有的jar包中的類,當(dāng)匹配類名稱的時(shí)候就顯示類所在的jar包。
          有以下幾個(gè)特性:

          * 允許添加jar包,zip包
          * 允許匹  閱讀全文
          posted @ 2009-12-31 17:07 imxylz 閱讀(20897) | 評(píng)論 (11)編輯 收藏

               摘要: 本章節(jié)繼續(xù)討論Google Guice與第三方的整合,這里主要討論如何整合JMX的服務(wù),通過guice-jmx插件我們可以很方便的將我們的服務(wù)注入到JMX服務(wù)中,這樣就能夠通過遠(yuǎn)程調(diào)用來控制我們的服務(wù)。  閱讀全文
          posted @ 2009-12-31 15:35 imxylz 閱讀(19885) | 評(píng)論 (3)編輯 收藏

               摘要: Google Guice 整合第三方組件。

          在《Google Guice 入門教程06 – Web 和Servlet》 中我們看到了Guice 整合Struts 2的應(yīng)用。本章節(jié)繼續(xù)討論Guice整合其它第三方組件的應(yīng)用。

          本章節(jié)重點(diǎn)談Guice與DWR和Spring的整合。
            閱讀全文
          posted @ 2009-12-29 00:11 imxylz 閱讀(27381) | 評(píng)論 (5)編輯 收藏

               摘要: 本章節(jié)主要講Guice中如何開發(fā)Servlet,當(dāng)然了作為IOC的容器,Guice在這方面仍然局限于依賴注入功能。作為WEB方面的開發(fā)就不能不提Struts,這里著重談如何與Struts 2進(jìn)行整合。  閱讀全文
          posted @ 2009-12-27 22:58 imxylz 閱讀(16789) | 評(píng)論 (1)編輯 收藏

               摘要: 本章節(jié)主要討論Guice中AOP的使用,其中花了一些篇幅談AOP的概念,然后通過一些API和例子來說明AOP的具體使用過程。  閱讀全文
          posted @ 2009-12-27 00:16 imxylz 閱讀(17788) | 評(píng)論 (2)編輯 收藏

               摘要: 本章節(jié)繼續(xù)討論依賴注入的其他話題,包括作用域(scope,這里有一個(gè)與線程綁定的作用域例子)、立即初始化(Eagerly Loading Bindings)、運(yùn)行階段(Stage)、選項(xiàng)注入(Optional Injection)等等。   閱讀全文
          posted @ 2009-12-25 18:02 imxylz 閱讀(16633) | 評(píng)論 (1)編輯 收藏

               摘要: 本章節(jié)繼續(xù)討論依賴注入的一些其它話題,包括多接口的實(shí)現(xiàn)、Provider的使用、綁定常量和綁定Properties等。  閱讀全文
          posted @ 2009-12-24 19:13 imxylz 閱讀(18687) | 評(píng)論 (1)編輯 收藏

               摘要: 本文主要討論Google Guice三種屬性注入的方式,包括基本屬性注入、構(gòu)造函數(shù)注入和Setter注入等。  閱讀全文
          posted @ 2009-12-23 23:45 imxylz 閱讀(20474) | 評(píng)論 (3)編輯 收藏

               摘要: 在我們64位的CenterOS上,指定了JVM的最大堆內(nèi)存為5500M,但是在top和進(jìn)程status中可以看到實(shí)際占用內(nèi)存已經(jīng)遠(yuǎn)遠(yuǎn)大于5500M,那么JVM到底占用多大內(nèi)存?如果做到控制JVM的占用內(nèi)存大???  閱讀全文
          posted @ 2009-12-23 19:51 imxylz 閱讀(3554) | 評(píng)論 (1)編輯 收藏

               摘要: 基于Google Guice 2.0的入門教程,本章節(jié)主要講類的依賴注入,也就是IOC容器的核心組件。  閱讀全文
          posted @ 2009-12-22 23:28 imxylz 閱讀(35762) | 評(píng)論 (5)編輯 收藏

               摘要: 本文將探討單例模式的各種情況,并給出相應(yīng)的建議。
          單例模式應(yīng)該是設(shè)計(jì)模式中比較簡(jiǎn)單的一個(gè),但是在多線程并發(fā)的環(huán)境下使用卻是不那么簡(jiǎn)單了。
          本文將探討在多線程下靜態(tài)域單例模式、雙重檢查鎖機(jī)制、類延時(shí)加載、同步鎖等機(jī)制的相關(guān)技術(shù)問題。  閱讀全文
          posted @ 2009-12-18 23:15 imxylz 閱讀(7352) | 評(píng)論 (4)編輯 收藏

               摘要: 大家都知道HashMap不是線程安全的,但是大家的理解可能都不是十分準(zhǔn)確。很顯然讀寫同一個(gè)key會(huì)導(dǎo)致不一致大家都能理解,但是如果讀寫一個(gè)總是存在HashMap中且不變的對(duì)象會(huì)有問題么?我們來試試看。  閱讀全文
          posted @ 2009-12-18 18:20 imxylz 閱讀(6174) | 評(píng)論 (2)編輯 收藏

          posted @ 2009-11-14 22:25 imxylz 閱讀(642) | 評(píng)論 (0)編輯 收藏

          posted @ 2009-11-13 23:31 imxylz 閱讀(577) | 評(píng)論 (0)編輯 收藏

          posted @ 2009-09-27 16:51 imxylz 閱讀(1343) | 評(píng)論 (1)編輯 收藏

          posted @ 2009-07-29 22:04 imxylz 閱讀(3265) | 評(píng)論 (4)編輯 收藏

          僅列出標(biāo)題
          共3頁: 上一頁 1 2 3 

          ©2009-2014 IMXYLZ
          主站蜘蛛池模板: 揭东县| 北辰区| 民和| 清水县| 温泉县| 平武县| 郯城县| 桐庐县| 双柏县| 怀仁县| 重庆市| 盘锦市| 巩留县| 宁夏| 马公市| 运城市| 海口市| 江口县| 长兴县| 南安市| 昌乐县| 汶上县| 寿光市| 凤城市| 武安市| 政和县| 昌乐县| 东辽县| 饶阳县| 临泽县| 桐柏县| 鹿泉市| 井研县| 三河市| 广汉市| 泰顺县| 常德市| 达孜县| 苗栗市| 三河市| 石楼县|