A second workaround is to use a collection class whose iterators won't give the exception. For example ConcurrentLinkedQueue, ConcurrentHashMap and so on.
These avoid the need to throw exceptions by providing weaker models of consistency for the iterators. (Of course, you need to understand those models, and decide whether they are suitable for your application.)
They are typically a bit slower than non-concurrent collections, but faster than the synchronized collection wrappers if there is significant contention.