次のような擬似コードを次に示します。
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 メソッドを同期させようとしましたが、タイマー スレッドで同期ブロックを試してみましたが、それでもエラーが発生し続けました。リストへの同時アクセスを停止する最も簡単な方法は何ですか?