当前位置: 首页 > news >正文

河北省沧州建设厅网站企业手机网站

河北省沧州建设厅网站,企业手机网站,wordpress固定连接怎么设置好,漫画网站做任务给金币字节面试,问到的一个小知识点,这里做一下总结,其实小编之前有一篇文章,已经对此有过涉及,不过这里知识专项针对于问题,把这个知识点拎出来说一下。 1.问题 什么是Fail-fast机制? Hashmap是否拥…

字节面试,问到的一个小知识点,这里做一下总结,其实小编之前有一篇文章,已经对此有过涉及,不过这里知识专项针对于问题,把这个知识点拎出来说一下。

1.问题

什么是Fail-fast机制?
Hashmap是否拥有Fail-fast机制?
ConcurrentModificationException异常原因和解决方法是什么?
哪些你常用的数据结构是Fail-fast的,哪些不是?举例说明一下
Enumeration与Iterator的异同?

在这里插入图片描述

2.探索、解答

2.1 Fail-fast机制

从字面意思,很好理解,就是快速失败机制。映射到java设计中,fail-fast 机制是java集合(Collection)中的一种错误机制。当多个线程对同一个集合的内容进行操作时,就可能会产生fail-fast事件。例如:当某一个线程A通过iterator去遍历某集合的过程中,若该集合的内容被其他线程所改变了;那么线程A访问集合时,就会抛出ConcurrentModificationException异常,产生fail-fast事件。

2.2 ConcurrentModificationException

List在for、while正常遍历过程中,如果remove元素,容易出现ConcurrentModificationException 异常,根本原因的话,之前ArrayList源码分析文章已经讲过,各位有兴趣可以移步阅读。

ConcurrentModificationException发生是因为我们在使用迭代器遍历List的同时,还使用了List相应的remove、add进行元素增加或删除,导致不一。

2.3 Enumeration与Iterator的异同

2.3.1 Iterator

java中迭代器接口的源码很简单,我们看下面


package java.util;import java.util.function.Consumer;public interface Iterator<E> {boolean hasNext();E next();default void remove() {throw new UnsupportedOperationException("remove");}default void forEachRemaining(Consumer<? super E> action) {Objects.requireNonNull(action);while (hasNext())action.accept(next());}
}

就是遍历、移除的接口定义,这块知识我们在Android源码设计模式探索与实战【迭代器模式】一文中,对于迭代器设计模式,做过深入剖析,迭代器模式重在容器类集合提供顺序遍历的方式,其实从上面Demo、实践案例、源码中,大家都可以看到,迭代器模式,实际上就是把不同类型的集合的遍历进行了封装, 这样针对于客户端来说,只需关注迭代器接口,不再需要关心内部使用了什么类型的集合。

2.3.2 Enumeration

我们看一下这个接口的源码

package java.util;/*** @see     java.util.Iterator* @see     java.io.SequenceInputStream* @see     java.util.Enumeration#nextElement()* @see     java.util.Hashtable* @see     java.util.Hashtable#elements()* @see     java.util.Hashtable#keys()* @see     java.util.Vector* @see     java.util.Vector#elements()** @author  Lee Boynton* @since   JDK1.0*/
public interface Enumeration<E> {boolean hasMoreElements();E nextElement();
}

只有是否还有元素的判断接口、遍历下一个元素的两个方法定义,并没有移除方法,所以这个玩意,自然而然就不存在Fail-fast和ConcurrentModificationException了。

2.3.3 Enumeration与Iterator异同总结

其实一看源码,相信大家就立马明白了,Enumeration与Iterator都是java定义的集合遍历接口,不同的是Iterator提供了移除接口。
有了移除操作,自然而然就是涉及到多线程安全性,那么就引入了可能存在的ConcurrentModificationException。

2.4 Fail-fast举例

哪些你常用的数据结构是Fail-fast的,哪些不是?上面源码的时候,其实大家已经看到了答案。
Arraylist、HashMap(LinkedHashmap、HashSet本身就是继承与Hashmap的)是有Fail-fast机制的,因为他们都有迭代器Iterator。而HashTable、Vector的某些遍历方式是没有的,因为它实现与Enumeration。

 * @see     java.util.Iterator* @see     java.io.SequenceInputStream* @see     java.util.Enumeration#nextElement()* @see     java.util.Hashtable* @see     java.util.Hashtable#elements()* @see     java.util.Hashtable#keys()* @see     java.util.Vector* @see     java.util.Vector#elements()public class Itbird{
public static void main(String[] args){Vector v = new Vector();v.addElement("my");v.addElement("you");Enumeration e = v.elements();//返回Enumeration对象while(e.hasMoreElements()){String value = (String)e.nextElement();//调用nextElement方法获得元素System.out.print(value);}}
}
http://www.15wanjia.com/news/169840.html

相关文章:

  • 衡水市网站建设推广通
  • 连云港集团网站建设关键词优化需要注意
  • 图书馆建设网站打不开如何写一份企业网站建设方案
  • 免费vip网站推广电话销售网站建设
  • 外国优秀设计网站宜兴建设局网站
  • 南昌网站建设搜q.479185700wordpress免插件增强
  • 推荐电子商务网站建设有关网站升级建设的申请书
  • 北京模板建站软件设计师培训基地
  • php网站怎么做伪静态河北中瑞建设集团有限公司网站
  • 国外免费建站网站西安公司做网站
  • 南京网站搜索排名山东省建设人才网站
  • 加强网站网络安全建设方案信息系网站建设开题报告书
  • 网站设计分析报告做私单的网站
  • 免费发布卖车信息网站外国做挂的网站是多少
  • 档案网站开发浙江网站推广公司
  • 网站服务器费用明细公司网站开发的工作内容
  • 国内设计大神网站苏州做网站公司 询苏州聚尚网络
  • 志愿者网站 建设方案新变更营业执照注册号查了发现之前有备案过网站了
  • 做流程图用什么网站好濮阳网站关键词
  • 机械产品做哪个网站网站推广 昆明
  • 网站更新seo菜市场做建筑设计图库的网站设计
  • 青岛app网站开发东莞市房管局官方网站
  • 重庆求建网站营销网建
  • seo如何选择网站标题电商设计和平面设计哪个好
  • 如何网站建设平台一台服务器一个固定ip怎样做两个网站
  • 宁波专业做网站的公司有哪些东莞高端网站建设哪个好
  • 学网站开发需要会什么网站翻页代码
  • 冷门行业做网站的优势深圳网络推广运营企业
  • 怎样健建设一个有利于优化的网站网站怎么创建自己的网站
  • 接给别人做网站的活电子商务网站建设与维护书