Referring to the the Javadoc of ConcurrentModificationException,
Note that this exception does not always indicate that an object has
been concurrently modified by a different thread. If a single thread
issues a sequence of method invocations that violates the contract of
an object, the object may throw this exception. For example, if a
thread modifies a collection directly while it is iterating over the
collection with a fail-fast iterator, the iterator will thow this
exception.
Its not always that this exception would be thrown when a thread-safe collection is subject to concurrent access. Any structural modification (add/delete) will prompt this exception to occur.
In your particular example, you are modifying the collection outside of Iterator and hence it might throw this exception once the thread wakes up from sleep.