ArrayListを拡張して、反復しながら通常のArrayListメソッドを使用して変更できるカスタムArrayListを作成しています。このために、私はイテレータも作成しています。
public class SynchronizedList<E> extends ArrayList<E>
{
// Fields here
//Constructors and methods here
public class SynchronizedListIterator<E> implements Iterator<E>
{
public int index;
private E current;
public boolean hasNext()
{
synchronized (/* reference to enclosing List object */) {
//code goes here
}
return false;
}
//more methods here
}
}
hasNext()メソッドとnext()メソッドの間、リストが変更されていないことを確認する必要があります(他のときに変更できます)。したがって、synchronized()ブロックで囲んでいるタイプを参照する必要があります。