Java技术教程
Java中的并发集合类详解与案例
引言
在Java的并发编程中,并发集合类是处理多线程共享数据的重要工具。Java提供了多种并发集合类,如`ConcurrentHashMap`、`CopyOnWriteArrayList`等,这些类能够在多线程环境下高效、安全地进行操作。
ConcurrentHashMap
`ConcurrentHashMap`是一个线程安全的哈希表,它允许在并发环境下以较高的效率进行读取和写入操作。`ConcurrentHashMap`通过使用分段锁(Segment Lock)和CAS(Compare-And-Swap)操作来减少锁竞争,从而提高了并发性能。
示例代码
import java.util.concurrent.ConcurrentHashMap;
public class ConcurrentHashMapExample {
public static void main(String[] args) {
ConcurrentHashMap map = new ConcurrentHashMap();
// 创建多个线程进行并发操作
Runnable task = () -> {
for (int i = 0; i < 1000; i++) {
map.put(Thread.currentThread().getName() + "-" + i, i);
}
};
Thread thread1 = new Thread(task);
Thread thread2 = new Thread(task);
thread1.start();
thread2.start();
try {
thread1.join();
thread2.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Map size: " + map.size());
}
}
CopyOnWriteArrayList
`CopyOnWriteArrayList`是一个线程安全的列表,其写操作(如添加、删除元素等)是在底层数组的一个副本上进行的,而读操作则是直接读取原数组。这种设计使得读操作是无锁的,从而在读多写少的场景中表现较好。
示例代码
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
public class CopyOnWriteArrayListExample {
public static void main(String[] args) {
List list = new CopyOnWriteArrayList();
// 创建多个线程进行并发操作
Runnable task = () -> {
for (int i = 0; i < 10; i++) {
list.add(Thread.currentThread().getName() + "-" + i);
}
};
Thread thread1 = new Thread(task);
Thread thread2 = new Thread(task);
thread1.start();
thread2.start();
try {
thread1.join();
thread2.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
for (String s : list) {
System.out.println(s);
}
}
}
总结
Java中的并发集合类为多线程编程提供了高效、安全的解决方案。`ConcurrentHashMap`通过分段锁和CAS操作减少了锁竞争,提高了并发性能;`CopyOnWriteArrayList`则通过读写分离,在读多写少的场景中表现突出。在实际应用中,我们应根据具体场景选择合适的并发集合类。