Kevin's Zone

  • Home
  • Project
  • ContactMe
  • Login
  • Register
Java
Java

ConcurrentHashMap 实现原理

由于 HashMap 是一个线程不安全的容器,主要体现在容量大于总量*负载因子发生扩容时会出现环形链表从而导致死循环。 因此需要支持线程安全的并发容器 ConcurrentHashMap 。 [title]数据结构[/title] 如图所示,是由 Segment 数组、HashEntry 数组组成,和 HashMap 一样,仍然是数组加链表组成。 ConcurrentHashMap 采用了分段锁技术,其中 Segment 继承于 ReentrantLock。不会像 HashTable 那样不管是 put 还是 ge…

2018年4月14日 0条评论 2755点热度 0人点赞 Kevin 阅读全文
Java

HashMap 底层分析

如图所示,HashMap 底层是基于数据和链表实现的。其中有两个重要的参数: 容量 负载因子 容量的默认大小是 16,负载因子是 0.75,当 HashMap 的 size > 16*0.75 时就会发生扩容(容量和负载因子都可以自由调整)。 put 方法 首先会将传入的 Key 做 hash 运算计算出 hashcode,然后根据数组长度取模计算出在数组中的 index 下标。 由于在计算中位运算比取模运算效率高的多,所以 HashMap 规定数组的长度为 2^n 。这样用 2^n - 1 做位运算与取模效…

2018年4月14日 0条评论 2749点热度 0人点赞 Kevin 阅读全文
学习笔记

Ubuntu下搭建ZooKeeper3.4.9集群 Dubbo2.5.3 Spring4.2.5整合

[title]准备工作[/title] 三台Ubuntu虚拟机(ZooKeeper服务器要2n+1的数量) 以下在虚拟机上的操作三台同步进行, 最后三台除了IP不一样, 其他都一样 [title]虚拟机设置固定IP和主机名(可省略, 为了好管理)[/title] 固定IP设置不详细说了, 自行百度, 把三台主机设置到同一个局域网下 IP分别192.168.32.10~12 在每台虚拟机修改hosts设置主机名: vim /etc/hosts 在下面增加同样的内容: 192.168.32.10 slave-01 19…

2017年10月18日 0条评论 3704点热度 2人点赞 Kevin 阅读全文

Kevin

这个人很懒,什么都没留下

分类
  • Docker
  • 学习笔记
  • Java
  • 生活随笔
  • Spring
  • Database
  • Netty
  • Linux
  • JS/JQuery
时光轴
  • 2018年4月
  • 2018年1月
  • 2017年12月
  • 2017年10月
  • 2017年9月
  • 2017年8月
  • 2017年7月
  • 2017年3月
  • 2017年2月
  • 2017年1月
  • 2016年12月
  • 2016年11月
最近评论
Plainter 发布于 2 年前(12月10日) 嗷呜催更 :drooling:
mcdaocang 发布于 6 年前(03月30日) 宋凯哥哥?MC小刀?jsd1407?还记得吗?我是苍融松。我现在高二了。哈哈哈哈,希望是你要给我回复...
书签
  • 码农的士

COPYRIGHT © 2021 Kevin's Zone. ALL RIGHTS RESERVED.

京ICP备16064400号-1