下面是一些伪代码。
public class MyObject
{
private List<Object> someStuff;
private Timer timer;
public MyObject()
{
someStuff = new ArrayList<Object>();
timer = new Timer(new TimerTask(){
public void run()
{
for(Object o : someStuff)
{
//do some more stuff involving add and removes possibly
}
}
}, 0, 60*1000);
}
public List<Object> getSomeStuff()
{
return this.someStuff;
}
}
所以本质上问题是上面代码中没有列出的其他对象调用 getSomeStuff() 来获取列表以用于只读目的。发生这种情况时,我在计时器线程中收到并发修改异常。我尝试使 getSomeStuff 方法同步,甚至尝试在计时器线程中同步块,但仍然不断收到错误。停止并发访问列表的最简单方法是什么?