mirror of
https://github.com/Snailclimb/JavaGuide
synced 2025-06-16 18:10:13 +08:00
commit
d8ce1b7180
@ -118,7 +118,7 @@ public static <T> T requireNonNull(T obj) {
|
|||||||
|
|
||||||
> **不要在 foreach 循环里进行元素的 `remove/add` 操作。remove 元素请使用 `Iterator` 方式,如果并发操作,需要对 `Iterator` 对象加锁。**
|
> **不要在 foreach 循环里进行元素的 `remove/add` 操作。remove 元素请使用 `Iterator` 方式,如果并发操作,需要对 `Iterator` 对象加锁。**
|
||||||
|
|
||||||
通过反编译你会发现 foreach 语法糖底层其实还是依赖 `Iterator` 。不过, `remove/add` 操作直接调用的是集合自己的方法,而不是 `Iterator` 的 `remove/add`方法
|
通过反编译你会发现 foreach 语法底层其实还是依赖 `Iterator` 。不过, `remove/add` 操作直接调用的是集合自己的方法,而不是 `Iterator` 的 `remove/add`方法
|
||||||
|
|
||||||
这就导致 `Iterator` 莫名其妙地发现自己有元素被 `remove/add` ,然后,它就会抛出一个 `ConcurrentModificationException` 来提示用户发生了并发修改异常。这就是单线程状态下产生的 **fail-fast 机制**。
|
这就导致 `Iterator` 莫名其妙地发现自己有元素被 `remove/add` ,然后,它就会抛出一个 `ConcurrentModificationException` 来提示用户发生了并发修改异常。这就是单线程状态下产生的 **fail-fast 机制**。
|
||||||
|
|
||||||
@ -436,4 +436,4 @@ CollectionUtils.addAll(list, str);
|
|||||||
```java
|
```java
|
||||||
Integer[] array = {1, 2, 3};
|
Integer[] array = {1, 2, 3};
|
||||||
List<Integer> list = List.of(array);
|
List<Integer> list = List.of(array);
|
||||||
```
|
```
|
||||||
|
Loading…
x
Reference in New Issue
Block a user