Groovy 了解并发修改

如果你没有遇到这种限制,你应该看看ConcurrentModificationException,例如,不能通过迭代时(iterating)每次移除第一个元素的方式来从列表中移除所有的元素:def list = [1, 2, 3, 4] list.each{ list.remove(0) } // throws ConcurrentModificationException !!注意:在这里并发不是意味着另外一个线程从根本上改变集合,如例子中所显示的那样,甚至一个单线程的控制也能改变结构的稳定性。

在这个例子中,正确的解决方法是使用clear方法,Collections API有许多专门的方法,当选择方案时,考虑collect/addAll/removeAll/findAll/grep。

这导致第二个问题:一些方法工作在集合的一个副本上并且完成的时候返回这个副本, 而另外一些方法直接工作在调用的这个集合对象上(这个对象我们叫做接受者对象)。