Generally speaking, fail-fast means that an outdated object got notification immediately. Thread-safe means multiple threads can access the object or function without any problem. Thread-safe is not necessarily fail-fast.Usually iterators are implemented as fail-fast.
One Iterator is created from a Collection.
Instead of calling remove() from the Iterator, one removed an element from the original Collection. Then if any additional action performed on the Iterator, the Exception will be thrown.
This is know as Fail-fast.