一针见血系列[7]: volatile离我们很近,很亲切,不该...

发布日期:2018年10月29日| 点击: 181 次| 评论: 1

synchronized代码块儿里面的变量都实现了内存可见性。内存可见性的底层是CPU的指令实现的。volatile修饰的是变量,它的作用也是实现内存可见性,底层用的用的同一个CPU指令。可以这样理解:synchr...

一针见血系列[6]: CPU乱序执行是正常,不乱序才是...

发布日期:2018年10月29日| 点击: 113 次| 暂无评论

现在的CPU一般采用流水线来执行指令。一个指令的执行被分成:取指、译码、访存、执行、写回等若干个阶段。多条指令可以同时存在于流水线中,同时被执行。 指令流水线并不是串行的,并不会因为一个耗时很长的指令在...

一针见血系列[5]: 一句话理解什么是happens-before

发布日期:2018年10月29日| 点击: 145 次| 暂无评论

在程序运行过程中,所有的变更会先在寄存器或本地cache中完成,然后才会被拷贝到主存以跨越内存栅栏,此种跨越序列或顺序称为happens-before。 注:happens-before本质是顺序,重点...

一针见血系列[4]: 一句话理解内存屏障/内存栅栏

发布日期:2018年10月29日| 点击: 128 次| 暂无评论

本文从简单入手,简单不代表肤浅,技术都是从简单发展起来的,然后变得复杂,甚至都偏离了初衷。有的人瞧不起简单,可不是什么好事啊。 简单来说内存屏障(Memory Barrier,或内存栅栏,Memory ...

一针见血系列[3]: 一针见血理解ThreadLocal类

发布日期:2018年10月29日| 点击: 133 次| 暂无评论

ThreadLocal类是修饰变量的,重点是在控制变量的作用域,初衷可不是为了解决线程并发和线程冲突的,而是为了让变量的种类变的更多更丰富,方便人们使用罢了。很多开发语言在语言级别都提供这种作用域的变量类型。 根...

一针见血系列[2]: 线程池里面到底该设置多少个线程呢...

发布日期:2018年10月29日| 点击: 246 次| 暂无评论

在Java中,通过下面的代码,我们可以很容易地获取到系统可用的处理器核心数目: [crayon-5c0f2867001a0500752827/] 基本原则是:应用程序的最小线程数应该等于可用的处理器核数。具体场景又分...

一针见血系列[1]: synchronized的两大不足

发布日期:2018年10月29日| 点击: 512 次| 暂无评论

第一大不足:由于我们没办法设置synchronized关键字在获取锁的时候等待时间,所以synchronized可能会导致线程为了加锁而无限期地处于阻塞状态。 第二大不足:使用synchronized关键字等同于使用了...

一针见血系列[0]: 关于一针见血系列的说明

发布日期:2018年10月29日| 点击: 150 次| 暂无评论

多线程与并发,这是一门学科,请把它当作一门独立的学科看待的。这门学科的内容,只有从多角度多层次的学习,才能有更好的学习效果。 对于多线程的内容,金丝燕网分为以下几个部分: 第一部分:《一针见血系列...

------====== 本站公告 ======------
金丝燕网,即将迎来四周年!

知识社群