并发编程进阶
本专栏将对 J.U.C的 各个类进行分析
world6
这个作者很懒,什么都没留下…
展开
-
深入理解join方法的实现原理
有一道面试题是: 如何控制多线程的执行顺序;线程的代码就不贴了。上伪码好了:main(){thread1.start();thread1.join();thread2.start();thead2.join();thread3.start();}有几个方法都可以做到,这里主要是套路最简单的使用join方法,如何解决。 首先看join方法的API 这是随手百度的 ...原创 2018-03-07 16:33:30 · 3389 阅读 · 0 评论 -
Java内存模型分析
1、内存模型的相关概念在讲内存模型前,我们来谈谈硬件的效率与一致性的问题计算机在执行程序时,每条指令都是在CPU中执行的,而执行指令过程中,势必涉及到数据的读取和写入。由于程序运行过程中的临时数据是存放在主存(物理内存)当中的,这时就存在一个问题,由于CPU执行速度很快,而从内存读取数据和向内存写入数据的过程跟CPU执行指令的速度比起来要慢的多,因此如果任何时候对数据的操作都要原创 2017-05-31 16:51:15 · 689 阅读 · 0 评论 -
volatile关键字解析
在给 volatile关键字解析 之前 希望看本文的朋友对Java内存模型有一定的了解;不了解的朋友可以先看看Java内存模型volatile关键字有什么用呢?1、保证了不同线程访问同一个变量时的可见性,也就是说A线程修改了一个变量的值,B线程C线程能马上就能看到这个变量的最新值。2、禁止指令的重排序。1、volatile关键字能保证可见性吗?看一个简单的例子:原创 2017-05-31 17:42:00 · 454 阅读 · 0 评论 -
<一>深入理解Threadlocal的实现原理
文章开头我想说,这是一篇面向不怎么懂 Threadlocal 的朋友的博客,所以有的人会觉得有点啰嗦,但不论您水平高低,相信耐着性子看完也一定会有收获。上次去深圳的一家大型的互联网金融公司面试,就被问到了 Threadlocal , 当时只是在代码里看到过用它来管理session。第一次看到的时候,当时觉得这么高深的东西还是以后去研究吧,结果就是面试官的一脸鄙视。。。花了一天时间好好看了一下源码...原创 2018-01-21 16:00:52 · 535 阅读 · 0 评论 -
<二>深入理解Threadlocal 关于内存泄漏的思考
不知道经常使用 Threadlocal 的朋友有没有意识到内存泄漏这一点。什么是内存泄漏呢?对象已经没有在其它地方被使用了,但是垃圾回收器没办法移除它们,因为还在被引用着。我不用的对象,又不能被垃圾回收,就会造成内存泄漏。不了解垃圾回收的朋友看这篇文章:垃圾回收的细节简单的拿个图表示下:如果你了解垃圾回收机制,活着看过周志明老师的 深入理解java虚拟机 第二版, 你肯定 知道强,软,弱,虚。...原创 2018-01-22 11:16:20 · 1059 阅读 · 1 评论 -
volatile和synchronized 实现原理的差别
提到volatile 和 synchronized 的时候不得不提到的一个东西就是JMM(java Memory Model)java内存模型。因为在并发的过程中 经常要处理一些 可见性 、 原子性 、 有序性的问题。并发编程中的两个关键问题是: 线程之间是 如何通信的。这又分两种情况: 1、共享内存 ——— 隐式通信 volatile 2、 消息传递 ——— 显示通信...原创 2018-03-07 21:47:06 · 2120 阅读 · 0 评论 -
深入理解 CAS 及 ABA问题
CAS,Compare And Swap,即比较并交换。CAS是Atomic 包的核心,更是整个J.U.C 包的 基石。 本文 将通过AtomicInteger这个类,来分析是如何通过CAS来保证 Atomic的原子性的。直接进入 AtomicInteger 这个类,可以看到AtomicInteger 中定义了一个变量value并且用 valatile来修饰的, 还有个静态...原创 2018-07-23 21:56:16 · 1536 阅读 · 0 评论