Java集合框架中的并发修改问题实例展示
在Java的集合框架中,尤其是在多线程环境下,并发修改问题是非常常见的。以下是一个具体的实例:
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class ConcurrentModifyExample {
private List<String> list = new ArrayList<>();
// 并发添加元素
public void addConcurrently(int count) {
ExecutorService executor = Executors.newFixedThreadPool(count);
for (int i = 0; i < count; i++) {
executor.submit(() -> list.add("Item " + i)));
}
executor.shutdown();
}
// 传统的单线程添加元素
public void addSequentially(int count) {
for (int i = 0; i < count; i++) {
list.add("Item " + i);
}
}
public static void main(String[] args) {
ConcurrentModifyExample example = new ConcurrentModifyExample();
example.list.add("Item 0");
// 并发添加5个新项
example.addConcurrently(5);
// 输出修改后的列表
System.out.println("After concurrent modification:");
for (String item : example.list) {
System.out.println(item);
}
// 传统的顺序添加10个新项
example.addSequentially(10);
// 再次输出修改后的列表
System.out.println("\nAfter sequential modification:");
for (String item : example.list) {
System.out.println(item);
}
}
}
在这个例子中,我们首先创建了一个列表。然后,我们使用addConcurrently
方法并发地添加了5个新项。接着,我们对修改后的列表进行输出。
最后,我们使用传统的顺序添加方法addSequentially
添加了10个新项,并再次输出修改后的列表。
这个例子展示了在多线程环境下,Java集合框架中并发修改问题的存在以及如何通过合理的设计和控制来避免这些问题。
还没有评论,来说两句吧...