什么叫快速失败?

gqqnb 2010-12-04 04:35:39
以Java synchronizedCollection集合来说,它的迭代器是快速失败的。

那它失败就失败吧,还快速,它快速在哪里?有多快?怎么个快法?一般的慢速的失败是怎么失败的?
...全文
1553 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
loshamo 2011-08-20
  • 打赏
  • 举报
回复
原来是这样啊 。
冰思雨 2010-12-07
  • 打赏
  • 举报
回复
顶果子的解释,非常到位.
  • 打赏
  • 举报
回复
好比对于方法的参数,一开始就检查其是否为 null,而不是到后面等用到的时候再检查(或者不检查),类似于这样的行为称为快速失败。

对于非并发集合来说,在其进行迭代时,若有其他线程修改了增减了集合中的内容,这个迭代会马上感知到,并且立即抛出 ConcurrentModificationException 异常,而不是迭代完成后才告诉你出错了。
龙四 2010-12-05
  • 打赏
  • 举报
回复
就是一旦异步修改了vector,迭代马上就报错,而不是继续迭代,到最后才报错
Dongo2 2010-12-05
  • 打赏
  • 举报
回复
快速失败是指某个线程在迭代vector的时候,不允许其他线程修改该vector的内容,这样迭代器迭代出来的结果就会不准确,如用iterator迭代collection的时候,iterator就是另外起的一个线程,它去迭代collection,如果此时用collection.remove(obj)这个方法修改了collection里面的内容的时候,就会出现ConcurrentModificationException异常,这时候该迭代器就快速失败。

---------正解
润物wu声 2010-12-04
  • 打赏
  • 举报
回复
快速失败是指某个线程在迭代vector的时候,不允许其他线程修改该vector的内容,这样迭代器迭代出来的结果就会不准确,如用iterator迭代collection的时候,iterator就是另外起的一个线程,它去迭代collection,如果此时用collection.remove(obj)这个方法修改了collection里面的内容的时候,就会出现ConcurrentModificationException异常,这时候该迭代器就快速失败。
冰思雨 2010-12-04
  • 打赏
  • 举报
回复
快速失败只是一种直译,它不是音译,但,近似与意译。
就如同手机一样,并不是只有拿在手里才能用,放在兜里,它照样能用。

手机的意译应该叫做移动电话,英文名称Mobile,直译就叫手机。
近似的,我们可以理解为拿在手里的通信机器,但这种定义并不准确,步话机也可以拿在手里通话。

快速失败,也是一个道理。
当然,近似的,我们也可以理解为,
当你的当前线程使用某个集合对象的迭代器访问集合内容的时候,
其他线程在你还没访问完事就已经更改了集合里面的内容。
本来你访问集合内容很迅速就能完事(可能几毫秒的事情),居然还有人(线程)比你(当前线程)还快。
这就叫快速失败。

就好像有一盘饺子,你要数数有几个,在你还没数完,其他人有放入(或拿走)了几个饺子。
你就只能重新再数了。本来你数数就很快,但是,就有人比你手更快。
tom_66 2010-12-04
  • 打赏
  • 举报
回复
快速失败 是指某个线程在迭代vector的时候,不允许其他线程修改该vector的内容,这样迭代器迭代出来的结果就会不准确,如用iterator迭代collection的时候,iterator就是另外起的一个线程,它去迭代collection,如果此时用collection.remove(obj)这个方法修改了collection里面的内容的时候,就会出现ConcurrentModificationException异常,这时候该迭代器就快速失败。

62,616

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧