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
          主站蜘蛛池模板: 鹤岗市| 伊宁县| 灌南县| 武汉市| 桃江县| 颍上县| 井研县| 鹿邑县| 弥勒县| 高碑店市| 塔城市| 闽侯县| 荥阳市| 米脂县| 梨树县| 卢湾区| 惠州市| 曲阜市| 当阳市| 桓台县| 南汇区| 泾源县| 旬阳县| 邓州市| 清徐县| 剑河县| 定远县| 罗田县| 射洪县| 靖安县| 孟连| 柘城县| 乐东| 方城县| 乐至县| 中西区| 治县。| 金川县| 仪陇县| 会东县| 哈巴河县|