常见的并发集合有哪些?

  • Post category:Java

常见的并发集合

在Java中,我们可以通过使用并发集合来实现多线程程序的并发同步,常见的并发集合有以下几种:

1. ConcurrentHashMap

ConcurrentHashMap是一个线程安全的哈希表,它是HashMap的线程安全版本,支持高并发的读写操作。主要解决了在多线程操作HashMap时出现的数据不一致问题。

示例说明

ConcurrentHashMap<String, Integer> map = new ConcurrentHashMap<>();
map.put("a", 1);
map.put("b", 2);
map.put("c", 3);
map.put("d", 4);

Thread t1 = new Thread(() -> {
    for (Map.Entry<String, Integer> entry : map.entrySet()) {
        System.out.println("key: " + entry.getKey() + ", value: " + entry.getValue());
    }
});

Thread t2 = new Thread(() -> {
    map.put("w", 5);
});

t1.start();
t2.start();

上述代码中,我们通过ConcurrentHashMap实现了一个线程安全的哈希表。在线程t1中我们遍历了哈希表,并输出其中的键值对;在线程t2中我们向哈希表中添加一个键值对。运行程序后,我们可以看到在多个线程同时读写哈希表时,程序依然能正常运行,并且输出的结果也是正确的。

2. CopyOnWriteArrayList

CopyOnWriteArrayList是一个线程安全的动态数组,它的实现基于可重入锁和数组复制技术,可以在多个线程同时写入的情况下保证数据的一致性。

示例说明

CopyOnWriteArrayList<String> list = new CopyOnWriteArrayList<>();
list.add("a");
list.add("b");
list.add("c");
list.add("d");

Thread t1 = new Thread(() -> {
    for (String str : list) {
        System.out.println(str);
    }
});

Thread t2 = new Thread(() -> {
    list.add("e");
});

t1.start();
t2.start();

上述代码中,我们通过CopyOnWriteArrayList实现了一个线程安全的动态数组。在线程t1中我们遍历了动态数组,并输出其中的元素;在线程t2中我们向动态数组中添加一个元素。运行程序后,我们可以看到在多个线程同时读写动态数组时,程序依然能正常运行,并且输出的结果也是正确的。

除了ConcurrentHashMap和CopyOnWriteArrayList,Java中还有许多其他常用的并发集合,如ConcurrentLinkedQueue、LinkedBlockingQueue、LinkedBlockingDeque等,读者可以根据具体的需求选择适合自己的并发集合。