JAVA并发编程
文章平均质量分 91
编程小菜吉
生活不能只是一张白纸。
展开
-
Collections之HashMap知识点
2、hashmap初始容量值的修改 先给出结论,我们在上面初始化了一个Hashmap的初始容量为11,但是它的初始化容量不是11,而是16,具体分析如下: 由上述的源码可知,当Java发现我们传入的toSize不是2的n次幂时,hashmap会自动帮我们将初始值转化为大于初始值toSize并且最接近toSize的2的n次幂。 hashmap初始化容量为什么要是2的n次幂呢? 假如数组length=16,hashcode经过运算后的结果应该是0~15;同时我们都知道,位运算会比四则运算快很多,所以我们选择位原创 2022-10-25 19:10:28 · 242 阅读 · 0 评论 -
synchronized详解
也就是当一个对象只有一个线程进行访问时,它的锁就是偏向锁。原创 2022-10-22 13:15:29 · 360 阅读 · 0 评论 -
CPU缓存一致性协议MESI
现在的计算机一般都是多CPU多核的,所以就会出现多个CPU或者多个核在同一时间访问同一个变量的情况,缓存一致性协议就是来解决当多个核同时对一个变量进行操作的时候,保证数据一致性的问题。CPU缓存系统中是以缓存行(cache line)为单位存储的。目前主流的CPU Cache 的 Cache Line 大小都是64Bytes。在多线程情况下,如果需要修改“共享同一个缓存行的变 量”,就会无意中影响彼此的性能,这就是伪共享(False Sharing)。原创 2022-10-19 22:41:04 · 579 阅读 · 0 评论 -
volatile详解
操作并不具备原子性,该操作是先读取值,然后写回一个新值,相当于原来的值加上1,分两步完成,如果第二个线程在第一个线程读取旧值和写回新值期间读取i的域值,那么第二个线程就会与第一个线程一起看到同一个值,并执行相同值的加1操作,这也就造成了线程安全失败,因此对于increase方法必须使用synchronized修饰,以便保证线程安全,需要注意的是一旦使用synchronized修饰方法后,由于。上面的这些规则呢,主要就是防止在多线程的环境下,指令重排给我们带来的不一定的结果,自己理解着记忆吧。原创 2022-10-19 20:22:09 · 228 阅读 · 0 评论 -
JMM&并发编程的三大问题
并发编程之JMM&并发编程的三大问题原创 2022-10-19 18:56:35 · 192 阅读 · 0 评论 -
操作系统底层的整体认识
通过操作系统的底层整体认识,更好地了解JAVA的并发编程原创 2022-10-18 21:59:47 · 836 阅读 · 0 评论