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

游戏试玩网站怎么做保定商库网络推广

游戏试玩网站怎么做,保定商库网络推广,购物网站服务器硬件配置,搭建服务器做网站1. Hashtable 和 HashMap#xff08;1#xff09;区别#xff0c;这两个类主要有以下几方面的不同#xff1a;Hashtable和HashMap都实现了Map接口#xff0c;但是Hashtable的实现是基于Dictionary抽象类。 在HashMap中#xff0c;null可以作为键#xff0c;这样的键只有…1. Hashtable 和 HashMap1区别这两个类主要有以下几方面的不同Hashtable和HashMap都实现了Map接口但是Hashtable的实现是基于Dictionary抽象类。 在HashMap中null可以作为键这样的键只有一个可以有一个或多个键所对应的值为null。 当get()方法返回null值时即可以表示 HashMap中没有该键也可以表示该键所对应的值为null。 因此在HashMap中不能由get()方法来判断HashMap中是否存在某个键而应该用containsKey()方法来判断。 而在Hashtable中无论是key还是value都不能为null 。    这两个类最大的不同在于1Hashtable是线程安全的它的方法是同步了的可以直接用在多线程环境中。2而HashMap则不是线程安全的。在多线程环境中需要手动实现同步机制。因此在Collections类中提供了一个方法返回一个同步版本的HashMap用于多线程的环境Java代码public static K,V MapK,V synchronizedMap(MapK,V m) {    return new SynchronizedMapK,V(m);    }  该方法返回的是一个SynchronizedMap 的实例。SynchronizedMap类是定义在Collections中的一个静态内部类。它实现了Map接口并对其中的每一个方法实现通过synchronized 关键字进行了同步控制。 2. 潜在的线程安全问题上面提到Collections为HashMap提供了一个并发版本SynchronizedMap。这个版本中的方法都进行了同步但是这并不等于这个类就一定是线程安全的。在某些时候会出现一些意想不到的结果。如下面这段代码Java代码// shm是SynchronizedMap的一个实例   if(shm.containsKey(key)){           shm.remove(key);   }   这段代码用于从map中删除一个元素之前判断是否存在这个元素。 这里的containsKey和reomve方法都是同步的但是整段代码却不是。  考虑这么一个使用场景线程A执行了containsKey方法返回true准备执行remove操作这时另一个线程B开始执行同样执行了containsKey方法返回true并接着执行了remove操作然后线程A接着执行remove操作时发现此时已经没有这个元素了。要保证这段代码按我们的意愿工作一个办法就是对这段代码进行同步控制但是这么做付出的代价太大。 在进行迭代时这个问题更改明显。Map集合共提供了三种方式来分别返回键、值、键值对的集合Java代码SetK keySet()     CollectionV values()     SetMap.EntryK,V entrySet()   在这三个方法的基础上我们一般通过如下方式访问Map的元素Java代码Iterator keys map.keySet().iterator();     while(keys.hasNext()){           map.get(keys.next());   }   在这里有一个地方需要注意的是得到的keySet和迭代器都是Map中元素的一个“视图”而不是“副本” 。问题也就出现在这里当一个线程正在迭代Map中的元素时另一个线程可能正在修改其中的元素。此时在迭代元素时就可能会抛出 ConcurrentModificationException异常。为了解决这个问题通常有两种方法1一是直接返回元素的副本而不是视图。这个可以通过集合类的 toArray() 方法实现但是创建副本的方式效率比之前有所降低特别是在元素很多的情况下2另一种方法就是在迭代的时候锁住整个集合这样的话效率就更低了。3. 更好的选择ConcurrentHashMapjava5中新增了ConcurrentMap接口和它的一个实现类ConcurrentHashMap。ConcurrentHashMap提供了和Hashtable以及SynchronizedMap中所不同的锁机制。Hashtable中采用的锁机制是一次锁住整个hash表从而同一时刻只能由一个线程对其进行操作而ConcurrentHashMap中则是一次锁住一个桶。ConcurrentHashMap默认将hash表分为16个桶诸如get,put,remove等常用操作只锁当前需要用到的桶。这样原来只能一个线程进入现在却能同时有16个写线程执行并发性能的提升是显而易见的。 上面说到的16个线程指的是写线程而读操作大部分时候都不需要用到锁。只有在size等操作时才需要锁住整个hash表。 在迭代方面ConcurrentHashMap使用了一种不同的迭代方式。在这种迭代方式中当iterator被创建后集合再发生改变就不再是抛出ConcurrentModificationException取而代之的是  在改变时new新的数据从而不影响原有的数据 。iterator完成后再将头指针替换为新的数据 。这样iterator线程可以使用原来老的数据。 而写线程也可以并发的完成改变。转载于:https://www.cnblogs.com/lianghui66/p/3267452.html
http://www.zqtcl.cn/news/741724/

相关文章:

  • 浙江做网站多少钱江门市网站开发
  • 保定建站价格dw软件免费安装
  • 在建设部网站上的举报凡科网怎么建网站
  • wordpress做小说网站工作期间员工花钱做的网站
  • 婚介网站方案小说网站架构
  • 英文在线购物网站建设湖北建设厅举报网站
  • 漯河网络推广哪家好宁波网站seo公司
  • 网站设计ppt案例做物流用哪个网站好
  • 做网站官网需多少钱天元建设集团有限公司财务分析
  • 一般网站建设用什么语言网络规划设计师历年考点
  • 做网站卖菜刀需要什么手续江苏网站优化
  • 花生壳内网穿透网站如何做seo优化鞍山58同城网
  • 怎么为一个网站做外链跨境电商app
  • 医疗网站不备案seo技巧课程
  • 网页和网站有什么区别湖南省郴州市邮编
  • 公考在哪个网站上做试题武威做网站的公司
  • 河南如何做网站常州网站建设价位
  • 昆山网站建设培训班成都百度
  • 兰山网站建设郑州最好的网站建设
  • 手机网站后台源码枣庄市建设局网站
  • 网站建设傲鸿wordpress 获取分类下的文章
  • 网站运行速度优化wordpress国内优化
  • wordpress全站网易云音乐播放网站建设案例公司
  • 湘潭网站建设多少钱 报价表湘潭磐石网络北京百度seo点击器
  • 什么做的网站电子商务网站的建设的原理
  • 河北建站科技网络公司媒体平台
  • 做同城信息类网站如何赚钱石景山网站建设多少钱
  • 用ip的网站要备案吗网站的建设维护及管理制度
  • dedecms 百度网站地图南宁比优建站
  • 沈阳大熊网站建设制作怎么增加网站的权重