以下是一些伪代码。
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()方法仅获取列表进行只读操作时,定时器线程会发生concurrentmodificationexception异常。我尝试将getSomeStuff方法设为同步方法,并在定时器线程中使用同步块,但仍然会出现错误。最简单的方法是如何停止对列表的并发访问?