juc学习----3.ConcurrentHashMap锁分段机制

    技术2025-10-13  15

    ConcurrentHashMap锁分段机制

    java5.0在juc包中提供了多种并发容器来改进同步容器的性能ConcurrentHashMap同步容器类是java5增加的一个线程安全的哈希表,对于多线程的操作,介于HashMap(线程不安全)与Hashtable(线程安全)之间,内部采用锁分段机制替代了Hashtable的独占锁,进而提高性能此包还提供乐设计用于多线程上下文的Collection实现:ConcurrentHashMap,ConcurrentSkipListMap,ConcurrentSkipListSet,CopyOnWriteArrayList和CopyOnWriteArraySet,当期望喜多线程访问一个给定Collection时,ConcurrentHashMap通常优于同步的HashMap,ConcurrentSkipListMap通常优于同步的TreeMap,当期望的读数和遍历远远大于列表的更新数时,CopyOnWriteArrayList优于同步的ArrayList。 测试: public class Test1 { public static void main(String[] args) { MyThread td = new MyThread(); for(int i = 0;i < 10;i ++) { new Thread(td).start(); } } } class MyThread implements Runnable{ //将ArrayList变为同步的list集合 private static List<String> list = Collections.synchronizedList(new ArrayList<String>()); static { list.add("AA"); list.add("BB"); list.add("CC"); } @Override public void run() { Iterator<String> iterator = list.iterator(); if(iterator.hasNext()) { System.out.println(iterator.next()); list.add("DD"); } } }

    结果: Exception in thread “Thread-5” AA java.util.ConcurrentModificationException 使用CopyOnWriteArrayList:

    private static CopyOnWriteArrayList<String> list = new CopyOnWriteArrayList<String>();

    添加操作多时,效率低,因为每次添加时都会进行复制,开销非常大,并发迭代操作多时可以选择。

    想了想,还是打算面试前再来复习复习这个.

    Processed: 0.009, SQL: 9