Todd

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            65 隨筆 :: 0 文章 :: 24 評論 :: 0 Trackbacks
          1、public V get(Object key)不涉及到鎖,也就是說獲得對象時沒有使用鎖;
          2、keySet().iterator()及keys(),獲取的Iterator、Enumeration變量是單線程訪問安全的,多線程訪問時要么生成多個Iterator、Enumeration(通過調用相應的獲取方法),要么以ConcurrentHashMap變量為鎖進行同步(synchronized該變量);ConcurrentHashMap變量是多線程訪問安全的,盡管是多線程訪問,多數情況下應該沒有鎖爭用;
          3、put、remove方法要使用鎖,但并不一定有鎖爭用,原因在于ConcurrentHashMap將緩存的變量分到多個Segment,每個Segment上有一個鎖,只要多個線程訪問的不是一個Segment就沒有鎖爭用,就沒有堵塞,各線程用各自的鎖,ConcurrentHashMap缺省情況下生成16個Segment,也就是允許16個線程并發的更新而盡量沒有鎖爭用;
          4、Iterator、Enumeration獲得的對象,不一定是和其它更新線程同步,獲得的對象可能是更新前的對象,ConcurrentHashMap允許一邊更新、一邊遍歷,未遍歷到的key一般能放映value更新;
          5、有些情況下這種不一致是允許的,如果需要最大的性能、吞吐量,則正好使用ConcurrentHashMap。

          目前只想到能用于緩存無關緊要的信息,對于讀寫 都須同步的操作,竟然還要加synchronized,悲劇的線程安全
          posted on 2010-04-13 09:23 Todd 閱讀(2338) 評論(0)  編輯  收藏 所屬分類: java
          主站蜘蛛池模板: 陆川县| 延庆县| 黑水县| 井冈山市| 南宁市| 宜丰县| 马公市| 无棣县| 洛浦县| 长白| 垣曲县| 钟祥市| 资阳市| 张家界市| 天祝| 敦煌市| 都江堰市| 洪雅县| 铅山县| 松溪县| 厦门市| 迁西县| 哈巴河县| 黄龙县| 罗定市| 永福县| 榆社县| 府谷县| 青州市| 武强县| 建始县| 武乡县| 申扎县| 交口县| 随州市| 独山县| 稻城县| 芷江| 隆尧县| 昆山市| 南平市|