我以为的fail-fast和fail-fafe

一、fail-safe允许在遍历的过程中对容器中的数据进行修改,而fail-fast则不允许。

二、fail-fast:直接在容器上进行遍历,在遍历过程中,一旦发现容器中的数据被修改了,会立刻抛出ConcurrentModificationException异常导致遍历失败。java.util包下的集合类都是快速失败机制的, 常见的的使用fail-fast方式遍历的容器有HashMap和ArrayList等。比如说在使用迭代器遍历一个集合对象时,比如增强for,如果遍历过程中对集合对象的内容进行了修改(增删改),会抛出ConcurrentModificationException 异常.

单线程下:使用迭代器遍历集合时,使用集合的方法对集合进行修改会报异常
多线程下:一个线程对集合使用迭代器进行遍历,另一个线程对集合进行修改

避免fail-fast的方法:

1)在单线程的遍历过程中,如果要进行remove操作,可以调用迭代器的remove方法而不是集合类的remove方法
2)使用fail-safe机制,使用java并发包(java.util.concurrent)中的CopyOnWriterArrayList类来代替ArrayList,使用 ConcurrentHashMap来代替hashMap。

三、fail-safe:这种遍历基于原容器的一个克隆,这样对容器内容的修改不影响遍历。java.util.concurrent包下的容器都是安全失败的,可以在多线程下并发使用,并发修改。

常见的的使用fail-safe方式遍历的容器有ConcerrentHashMap和CopyOnWriteArrayList等。

原理:采用安全失败机制的集合容器,在遍历时不是直接在集合内容上访问的,而是先复制原有集合内容,在拷贝的集合上进行遍历。由于迭代时是对原集合的拷贝进行遍历,所以在遍历过程中对原集合所作的修改并不能被迭代器检测到,所以不会触发Concurrent Modification Exception。

缺点:基于拷贝内容的优点是避免了Concurrent Modification Exception,但同样地,迭代器并不能访问到修改后的内容,即:迭代器遍历的是开始遍历那一刻拿到的集合拷贝,在遍历期间原集合发生的修改迭代器是不知道的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
鱼鱼 WEB IM 2008-2009 本程序版权归鱼鱼qq260332019所有, 此程序非经鱼鱼许可禁止用于商业用途, 作者保留该程序名称、源码的所有相关权利] 源码没有丝毫保留,全部开放提供,请大家多提修改意见. 源码没有丝毫保留,全部开放提供,请大家多提修改意见. 源码没有丝毫保留,全部开放提供,请大家多提修改意见. '转发时请保留此声明信息,这段声明不并会影响你的速度! '*************************鱼鱼 WEB IM 2008-2009*********************************** ' '作者 鱼鱼(qq:260332019) '网站:http:// '电子邮件:260332019@qq.com 'WEB开发群:4531488 'QQ:260332019 '版权声明:版权所有,源代码公开,除商业用途外其他各种用途均可免费使用,但是修改后必须把修改后的文件 '发送一份给作者.并且保留作者此版权信息 '****************************************************************************** 目标:以前写过漫漫,但还不够好,鱼鱼要改进,比漫漫更好 在鱼鱼基础上开发各种WEB应用,挂接到鱼鱼上,不断扩展 以鱼鱼为核心,完善鱼鱼好友、群、组等基本聊天功能 扩展鱼鱼,与各种WEB应用紧密结合,鱼鱼号码做为接口 发展鱼鱼,努力构建WEB版腾讯QQ,打造鱼鱼通用平台 以鱼鱼平台为基础,开发各种WEB应用平台,凝聚平台效应 努力使鱼鱼更加优秀,让鱼鱼成为很好很强大的在线平台 运行regdll.bat注册fish.dll,然后可以正常访问,测试号码10000~10100,密码都为1 文件夹app是小应用文件夹,可扩展鱼鱼webim 2008-10-17开始写鱼鱼 2008-10-18上午 基本完成数据库设计,包括了鱼鱼群表等,完成好友列表框架 2008-10-19完善好友列表框架,好友列表按状态显示,增加好友状态图标显示, 增加鱼鱼号码等级、头像、图标等 2008-10-21解决好友列表和在线人数无法显示bug,使用clng转换类型 注意条件判断时用clng转换鱼鱼号码 增加消息收发、查找用户 2008-10-23完善消息收发 2008-10-24增加鱼鱼个人设置,鱼鱼资料查看 2008-10-25艰难的完善好友操作,由于数据库设计得有些奇怪,程序非常难写,且问题很多 添加分组操作,增加分组消息提示 2008-10-26增加系统信息,上下栏,初步集成多用户博客平台 性能测试,结果显示好友人数200上限,还凑合 人数再多的话,由于10秒刷新好友列表,请求得不到即时响应,使用起来会不流畅 2008-10-27清晰化好友添加、删除、加入黑名单、移动好友的逻辑 2008-10-28增加发消息时表情选择 2008-11-19增加好友列表图标 2008-11-25修改左侧栏、左侧列表指针显示为默认箭头,用户登录后自动删除1周前所有聊天消息 2009-1-4 增加鱼鱼应用 2009-1-19 增加聊天窗口图标 微蓝#CEDFF6 #F5FAFE 淡蓝#D5E3F4 #E4EFF8 #A4C3F6 #DBE1F4 #C5D6EF #C5E3F5 #E8F7FD #D5EBF9 #E3ECF9 #EFF9FE 浅蓝#A6C5E8 #BED7ED #DCEBFB #D4E3F6 #D3D8FD #D1E7FC 深蓝#4B92D9 #59AAEE #6891D3 #179BF6 #00551A #89AACF #D5E1EE #F5FAFE
鱼鱼webim2009beta1(2009-5-10) [方向、定位、目标、小应用添加、注意、更新] 本程序版权归鱼鱼qq260332019所有, 此程序非经鱼鱼许可禁止用于商业用途, 作者保留该程序名称、源码的所有相关权利] 源码没有丝毫保留,全部开放提供,请大家多提修改意见. 源码没有丝毫保留,全部开放提供,请大家多提修改意见. 源码没有丝毫保留,全部开放提供,请大家多提修改意见. '转发时请保留此声明信息,这段声明不并会影响你的速度! '*************************鱼鱼webim2009beta1(2009-5-10)*********************************** ' '作者 鱼鱼(qq:260332019) '网站:http:// '电子邮件:260332019@qq.com 'WEB开发群:4531488 'QQ:260332019 '版权声明:版权所有,源代码公开,除商业用途外其他各种用途均可免费使用,但是修改后必须把修改后的文件 '发送一份给作者.并且保留作者此版权信息 '***************************************************************************************** 方向:将软件开发或程序开发划分为几块,满足工作、生活、娱乐、休闲、学习、交流等不同需求,根据这些需求,开发各种应用软件或程序。 从开发方面来看,软件主要分为web和非web,web程序主要是asp、php、jsp、.net、cgi等基于web的b/s架构或单机架构程序,非web主要是vb、c、c++、vc、java、delphi等基于桌面的c/s架构或单机架构程序。 定位:鱼鱼webim将致力于发展成为具有潜力、活力、魅力、创新、简单、稳定、强大的基于web的即时通讯平台。 目标:以前写过漫漫,但还不够好,鱼鱼要改进,比漫漫更好 在鱼鱼基础上开发各种WEB应用,挂接到鱼鱼上,不断扩展 以鱼鱼为核心,完善鱼鱼好友、群、组等基本聊天功能 扩展鱼鱼,与各种WEB应用紧密结合,鱼鱼号码做为接口 发展鱼鱼,努力构建WEB版腾讯QQ,打造鱼鱼通用平台 以鱼鱼平台为基础,开发各种WEB应用平台,凝聚平台效应 努力使鱼鱼更加优秀,让鱼鱼成为很好很强大的在线平台 运行regdll.bat注册fish.dll,然后可以正常访问,测试号码10000~10100,密码都为1 文件夹app是小应用文件夹,可扩展鱼鱼webim 小应用添加方式(可在前台添加小应用): 应用路径如果在app文件夹下,则路径格式为app/应用文件夹名称/应用程序名称,如app/shiqing或app/shiqing/index.asp 应用路径如果在互联网上,则路径格式为对应应用程序全部url,如http://www.aiwuhui.net/yy/txz/20070910songshu.swf 注意: 程序采用实时等级计算方法,算法类似QQ等级算法,session过期时间为24小时, 如因操作或浏览器进程阻塞等原因退出而不能进入,请等待1天左右。 2008-10-17开始写鱼鱼 2008-10-18上午 基本完成数据库设计,包括了鱼鱼群表等,完成好友列表框架 2008-10-19完善好友列表框架,好友列表按状态显示,增加好友状态图标显示, 增加鱼鱼号码等级、头像、图标等 2008-10-21解决好友列表和在线人数无法显示bug,使用clng转换类型 注意条件判断时用clng转换鱼鱼号码 增加消息收发、查找用户 2008-10-23完善消息收发 2008-10-24增加鱼鱼个人设置,鱼鱼资料查看 2008-10-25艰难的完善好友操作,由于数据库设计得有些奇怪,程序非常难写,且问题很多 添加分组操作,增加分组消息提示 2008-10-26增加系统信息,上下栏,初步集成多用户博客平台 性能测试,结果显示好友人数200上限,还凑合 人数再多的话,由于10秒刷新好友列表,请求得不到即时响应,使用起来会不流畅 2008-10-27清晰化好友添加、删除、加入黑名单、移动好友的逻辑 2008-10-28增加发消息时表情选择 2008-11-19增加好友列表图标 2008-11-25修改左侧栏、左侧列表指针显示为默认箭头,用户登录后自动删除1周前所有聊天消息 2009-1-4 增加鱼鱼应用 2009-1-19 增加聊天窗口图标 2009-4-17 修改了一些程序错误 2009-4-20 修改了一些程序错误 2009-4-22 修改了一个dll错误 2009-5-10 区分鱼鱼应用、小应用显示 微蓝#CEDFF6 #F5FAFE 淡蓝#D5E3F4 #E4EFF8 #A4C3F6 #DBE1F4 #C5D6EF #C5E3F5 #E8F7FD #D5EBF9 #E3ECF9 #EFF9FE 浅蓝#A6C5E8 #BED7ED #DCEBFB #D4E3F6 #D3D8FD #D1E7FC 深蓝#4B92D9 #59AAEE #6891D3 #179BF6 #00551A #89AACF #D5E1EE #F5FAFE

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值