据我所知,当一个线程迭代集合而另一个线程修改集合时,有两种方法可以避免 ConcurrentModificationException。
- 客户端锁定,基本上在迭代期间锁定集合。需要访问集合的其他线程将阻塞,直到迭代完成。
- 克隆集合并迭代副本的“线程受限”。
我想知道还有其他选择吗?因为第一种方式显然是不可取的并且性能不佳,如果集合很大,其他线程可能会等待很长时间。第二种方式我不确定,因为我们克隆了集合,并迭代了副本,所以如果其他线程进来并修改原始的,那么复制的就会变得陈旧,对吧?这是否意味着我们需要通过克隆重新启动并在修改后再次迭代它?