最近看到面试题里说到Enumeration与Iterator区别时,都有一条后者更加安全,只说Iterator遍历时,其他线程无法调用,但是它是怎样实现的呢?
Enumeration只能用来遍历Vector和hashtable,这两个集合都是线程安全,底层源代码很多方法都被sychronized锁住了的,为什么这样的集合在遍历时,能被其他线程调用呢?
这种说法貌似不太对吧,枚举类是不可变类,而迭代器可以在迭代时通过 remove 方法删除元素的,虽然它有同步,但是还是允许多线程的,某种程度上还不是安全的。
而枚举类即使是多线程操作,也不会改变其属性,肯定是线程安全。