![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
死磕并发
王晓航
务实
展开
-
【死磕Java并发】- 深入分析volatile的实现原理
通过前面一章我们了解了synchronized是一个重量级的锁,虽然JVM对它做了很多优化,而下面介绍的volatile则是轻量级的synchronized。如果一个变量使用volatile,则它比使用synchronized的成本更加低,因为它不会引起线程上下文的切换和调度。Java语言规范对volatile的定义如下:Java编程语言允许线程访问共享变量,为了确保共享变量能被准确和一致地更新...转载 2018-12-26 15:10:04 · 165 阅读 · 0 评论 -
【死磕Java并发】- Java内存模型之happens-before
原文博客:http://cmsblogs.com/?p=2102在上篇博客(【死磕Java并发】—–深入分析volatile的实现原理)中提到过由于存在线程本地内存和主内存的原因,再加上重排序,会导致多线程环境下存在可见性的问题。那么我们正确使用同步、锁的情况下,线程A修改了变量a何时对线程B可见?我们无法就所有场景来规定某个线程修改的变量何时对其他线程可见,但是我们可以指定某些规则,这规则就...转载 2018-12-26 15:12:07 · 105 阅读 · 0 评论 -
【死磕Java并发】—–J.U.C之AQS:CLH同步队列
原文博客:http://cmsblogs.com/?p=2188上篇博客【死磕Java并发】—–J.U.C之AQS:AQS简介中提到了AQS内部维护着一个FIFO队列,该队列就是CLH同步队列。CLH同步队列是一个FIFO双向队列,AQS依赖它来完成同步状态的管理,当前线程如果获取同步状态失败时,AQS则会将当前线程已经等待状态等信息构造成一个节点(Node)并将其加入到CLH同步队列,同时会...转载 2018-12-26 15:18:58 · 112 阅读 · 0 评论 -
【死磕Java并发】- 深入分析synchronized的实现原理
原文博客:http://cmsblogs.com/?p=2071参考博客:https://blog.csdn.net/wwh578867817/article/details/52004265实现原理synchronized可以保证方法或者代码块在运行时,同一时刻只有一个方法可以进入到临界区,同时它还可以保证共享变量的内存可见性Java中每一个对象都可以作为锁,这是synchronized...转载 2018-12-17 09:41:01 · 100 阅读 · 0 评论