I'm wondering if we shouldn't just use http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/collect/ImmutableList.Builder.html and synchronize on the object when we want to add.  Then build a list and use iterators of well-tested library code.