Map的使用,LinkedHashMap ConcurrentHashMap

LinkedHashMap 会将put进去的key value  按照次序进行遍历。

ConcurrentHashMap 1.允许并发的读操作。

  2. 性能好。根据默认的并发级别(concurrency level),Map被分割成16个部分,并且由不同的锁控制。这意味着,同时最多可以有16个写线程操作Map。由只能一个线程进入变成同时可由16个写线程同时进入(读线程几乎不受限制),性能的提升是显而易见的。但由于一些更新操作,如put(),remove(),putAll(),clear()只锁住操作的部分,所以在检索操作不能保证返回的是最新的结果。

  3. 线程安全性弱。CHM在put操作时并没有对整个Map加锁,所以一个线程正在put(k,v)的时候,另一个线程调用get(k)会得到null,这就会造成一个线程put的值会被另一个线程put的值所覆盖。CHM提供的putIfAbsent(key,value)方法原子性,同时避免了线程竞争的风险。CHM适用于读者数量超过写者时,当写者数量大于等于读者时,CHM的性能是低于Hashtable和synchronized Map的。这是因为当锁住了整个Map时,读操作要等待对同一部分执行写操作的线程结束。

  4. 优势。CHM适用于做cache,在程序启动时初始化,之后可以被多个请求线程访问。

 

posted @ 2017-06-27 14:50  joe立  阅读(2255)  评论(0编辑  收藏  举报