Java中集合操作的并发问题实例
在Java中,集合(如ArrayList、Vector等)的并发操作可能会引发各种问题。以下是一个简单的实例:
// 创建一个包含三个元素的ArrayList
List<String> list = new ArrayList<>();
list.add("Element 1");
list.add("Element 2");
list.add("Element 3");
// 使用synchronized关键字同步访问列表
synchronized (list) {
// 同步代码,这里假设我们正在更新列表
for (int i = 0; i < 2; i++) {
list.remove(list.size() - 1); // 删除元素,但操作是异步的
System.out.println("Element " + (i + 1) + " removed from list");
}
}
// 在这个线程中运行其他代码,可能会与同步块中的代码并发执行
new Thread(() -> {
for (int i = 0; i < 2; i++) {
list.add("Inserted Element " + (i + 1))); // 插入元素,但操作是异步的
System.out.println("Inserted Element " + (i + 1)) + " into list");
}
}
).start();
// 结果:可能会出现"Element 4 removed from list"先于"Inserted Element 1 into list"的情况,这取决于线程调度和同步块执行的顺序。
这个例子展示了在多线程环境下,不正确地同步集合操作可能导致数据不一致的问题。
还没有评论,来说两句吧...