全文共计1959字18图,预计浏览工夫13分钟
                    大家好,我是tin,这是我的第8篇原创文章

这个图拍摄于老家县城一售楼处。作为外出下班的一族,一年365天在家的工夫经常不超过十天。

在侃技术前,聊一聊本人对他乡变动的感叹。

最大的感叹莫过于,咱们县城要通高铁了,当前老家和工作之地的间隔将变成2小时!想想就感觉这是一件如许幸福的事。

今年过年回家趁着假期和家人又新购买了一套新商品期房,就买高铁站片区边上。

在家买房的最大特点就是,房子面积要大的,动不动都一百多两百平,在深圳这个中央就不敢想啦。

房子原本最早于2019年已打算购买,但过后工夫仓促没看好,加之2020年过年刚好遇上疫情,足不出户,一耽误就到了2021年。

或者刚好是疫情的起因,往年房价特价销售(也就是提价了),绝对2019年降了500-1000元/㎡。在这种七八线城市,房价本就几千块一平,这个提价幅度是异样高的(打心里认为,2021年是小城购房最佳时机之一)。

其实,这里唠嗑只是想感叹一下小城市的变动之大!然而咱们很多人却容易疏忽身边最亲热的事与物。比方我,我居然不知咱们县城的政务核心都搬迁了,整个县城南片区布局建设已相当欠缺,商品房、幼儿园、中小学校区、超宽小道等等随处可见,新医院、新行政办公楼、高铁站等这些仿佛在放大与大城市的差距。

这些年,国家对农村建设力度也很大,肉眼可见的变动经常被咱们谈及。广泛被提到的一个变动是路变好了。村村通公路、水泥路,每年外出回家的人肯定能感触到。路变好,相应的是,车也就多了。买车的人越来越多,每家都会有一辆代步小轿车。

除了车,家里爸爸妈妈们网上购物更加频繁,比起以往,老人们都能够自行网上购物,自行取快递,这种线上体验的场景规模越来越空大,所以,农村通宽带也已不是什么新鲜事。

敌人们,你们感觉呢,你们他乡还有哪些变动?

ConcurrentHashMap

咱们关上ConcurrentHashMap源码,类结尾显明地标着作者: @author Doug Lea

Doug Lea是谁?以前也有提到过,他是一位大学老师,同时也是世界上对Java影响最大的人之一。JDK源码中java.util.concurrent 包就是他创作的。

咱们找到jdk1.7的源码,ConcurrentHashMap中的get办法还能看到Doug Lea的代码(下图源码截图基于jdk7-b147)

咱们晓得,HashMap 是线程不平安的,并发状况下应用hashmap有cpu飙升的危险。为了应用线程平安的 HashMap,咱们常应用 ConcurrentHashMap。

本文基于jdk1.7解说,所以concurrenthashmap还是采纳分段锁。

ConcurrentHashmap默认有16个Segment,最多反对65536个Segment,这是能够通过ConcurrentHashMap的结构器指定的。默认状况下ConcurrencyLevel等于16

如果指定ConcurrencyLevel,最大只能等于65535

Segment通过继承ReentrantLock来进行加锁,每次锁住一个segment来保障每个Segment内的操作的线程安全性从而实现全局线程平安。

定位一个元素的过程须要进行两次Hash操作,第一次Hash定位到Segment,第二次Hash定位到元素所在的链表的头部。看看get办法的源码:

ConcurrentHashMap定义了一个Segment数组segments,Segment则定义了一个HashEntry数组table。

这种两级定位的构造带来的副作用是hash过程要比一般的HashMap要长,然而带来的益处是更大的,写操作能够只对元素所在的Segment进行加锁即可,不会影响到其余的Segment,这样,ConcurrentHashMap能够反对最大Segment数量的并发量,吞吐量就比HashMap大了很多。

仔细的你可能曾经发现,代码截图中应用到了UNSAFE.getObjectVolatile(segments, u) ,这个是什么意思呢?

getObjectVolatile是为保障并发拜访数组的第 k 个元素能够显式 volatile 读取,为了值的可见性。

说到Unsafe,这玩意儿咋一看感觉很高大上,因为咱们平时编程简直没见过。然而,Unsafe当初在Java外面是一个“擦边球”,根本处于一个“不举荐应用”的状态。

Unsafe是位于sun.misc包下的一个类,次要提供一些用于执行低级别、不平安操作的办法,如间接拜访零碎内存资源、自主治理内存资源等。因为能够拜访系统资源、能够自主操作内存空间,这无疑减少了程序产生指针问题的危险,Java的垃圾回收器原本很大一个起因是为了解决这个问题,应用Unsafe类会使得程序出错的概率变大,Java官网也不倡议开发者应用它。

R大有一篇答复,对于Unsafe,为什么JUC中大量应用了sun.misc.Unsafe 这个类,但官网却不倡议开发者应用? - 知乎

结语

我是tin,一个在致力让本人变得更优良的一般攻城狮。本人经历无限、学识肤浅,如有发现文章不妥之处,十分欢送加我提出,我肯定仔细斟酌加以批改。

保持原创不容易,你的正反馈是我保持输入的最弱小能源,谢谢!