fail-fast 机制

在项目中,写的一段程序为对Set集合遍历的过程中异常set集合里的元素,导致出现下面的异常:

Set<String> keySet=disposableBeansMap.keySet ();
		keySet.toArray ();
		for (String key:keySet)
		{
			try {
			//从单例缓存中清除bean
			singletonObjectMap.remove (key);
			//从销毁缓存中取出Bean对应的销毁函数
			DisposableBean disposable = disposableBeansMap.remove (key);

			disposable.destory ();
			} catch (Exception e) {
				throw  new BeanException ("Destory method on bean with name ' "+key+ " ' throw an exception:",e);
			}
		}

Exception in thread "destoryThread" java.util.ConcurrentModificationException
    at java.util.HashMap$HashIterator.nextNode(HashMap.java:1445)
    at java.util.HashMap$KeyIterator.next(HashMap.java:1469)
    at com.beanbox.beans.registry.support.DefaultSingletonBeanRegistry.destorySingletons(DefaultSingletonBeanRegistry.java:61)
    at com.beanbox.context.AbstractApplicationContext.close(AbstractApplicationContext.java:91)
    at java.lang.Thread.run(Thread.java:748)
 

解决办法:

Set<String> keySet=disposableBeansMap.keySet ();
		//解决fail-fast
		String[] beanNames =  keySet.toArray (new String[0]);
		for (String key:beanNames)
		{
			try {
			//从单例缓存中清除bean
			singletonObjectMap.remove (key);
			//从销毁缓存中取出Bean对应的销毁函数
			DisposableBean disposable = disposableBeansMap.remove (key);

			disposable.destory ();
			} catch (Exception e) {
				throw  new BeanException ("Destory method on bean with name ' "+key+ " ' throw an exception:",e);
			}
		}

详细介绍:

java中的fail-fast(快速失败)机制_Howard的博客-CSDN博客引入在前面介绍ArrayList的扩容问题时对于modCount的操作没有详细说明,该变量的操作在add,remove等操作中都会发生改变。那么该变量到底有什么作用呢?简介fail-fast 机制,即快速失败机制,是java集合(Collection)中的一种错误检测机制。当在迭代集合的过程中该集合在结构上发生改变的时候,就有可能会发生fail-fast,即抛出ConcurrentMohttps://blog.csdn.net/zymx14/article/details/78394464

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值