当前位置: 首页 > 后端技术 > Java

另一个!看jdk源码大师亲手写的合集源码!

时间:2023-04-02 01:43:59 Java

全文共1959字,18张图片,预计阅读时间13分钟。作为外出打工的一族,一年365天,在家的时间往往不超过十天。在谈技术之前,谈谈你对家乡变化的感受。最大的感慨就是我们县城要通高铁了,以后老家到上班的距离变成2小时!想想就觉得这是何等的幸福。今年过年回家,趁着假期和家人买了一套新的商业期房,就在高铁站附近买的。在家里买房最大的特点就是房子的面积一定要大,动不动就可以在100到200多平方米。在深圳,我不敢想。房子原本计划最早在2019年购买,但当时时间太短,不容乐观。再加上2020年过年刚好遇上疫情,宅在家里,一直拖到2021年。也许正是因为疫情,今年的房价才卖特价(即降价了),比2019年降了500-1000元/㎡。在这种七八线城市,房价已经是几千元一套房了,这个降价幅度极高(我心里觉得2021年是小镇买房的最佳时机之一)。其实在这里唠叨就是想感受一下小城的巨变!但是我们中的许多人往往会忽略离我们最近的事物和事物。比如,我不知道我们县的政务中心搬迁了。整个县城南区规划建设比较完善。商品房、幼儿园、中小学校园、超宽大道等随处可见。新建医院、新建行政办公楼、高铁……这些似乎正在缩小与大城市的差距。近年来,国家在农村建设方面也下了很大的功夫,我们常说的是肉眼可见的变化。通常提到的一个变化是道路有所改善。村村通公路、通水泥路,年年出门回家的人一定能感受到。道路改善了,相应地,汽车也多了。买车的人越来越多,每个家庭都会有一辆代步车。除了汽车,在家的父母也更频繁地在网上购物。与以往相比,老年人可以网上购物,自己取快递。这种在线体验的规模越来越大。没什么新鲜的。朋友们,您觉得您的家乡发生了哪些变化?ConcurrentHashMap我们打开ConcurrentHashMap的源码,作者在类的开头有明确的标注:@authorDougLeaDougLea是谁?如前所述,他是一名大学教师,也是世界上对Java最有影响力的人之一。JDK源码中的java.util.concurrent包就是他创建的。我们找到了jdk1.7的源码,ConcurrentHashMap中的get方法也可以看到DougLea的代码(下面源码截图是基于jdk7-b147的)我们知道HashMap不是线程安全的,并且并发使用hashmap时有cpu飙升的风险。为了使用线程安全的HashMap,我们经常使用ConcurrentHashMap。本文基于jdk1.7讲解,所以concurrenthashmap依然使用段锁。ConcurrentHashmap默认有16个段,最多支持65536个段,可以通过ConcurrentHashMap的构造函数指定。ConcurrencyLevel默认等于16,如果指定了ConcurrencyLevel,最大只能等于65535。通过继承ReentrantLock对Segments加锁,对每个Segment加锁,保证每个Segment内操作的线程安全,从而实现全局线程安全。定位一个元素的过程需要两次哈希运算。第一个Hash定位Segment,第二个Hash定位元素所在链表的头部。查看get方法的源码:ConcurrentHashMap定义了一个Segment数组段,Segment定义了一个HashEntry数组表。这种二级定位结构的副作用是哈希过程比普通的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类,但是官方不推荐开发者使用呢?——知乎结语我是锡,一只努力让自己变得更好的普通攻城狮。我经验有限,知识浅薄。如果您发现文章中有不妥之处,非常欢迎您加我提出建议。我会认真考虑修改的。坚持原创不易,您的好评是我坚持输出最强大的动力,谢谢!