05 2018 档案
摘要:并发之不可变对象 什么是不可变对象 不可变对象 :一个对象的状态在对象被创建之后就不再变化。不可变对象对于缓存是非常好的选择,因为你不需要担心它的值会被更改。 必须满足三个条件才可以称之为不可变对象 1. 对象创建完成后其状态不可修改。(数据私有并且没有对状态的修改方法) 2. 对象的所有域都是fi
阅读全文
摘要:原文链接 https://medium.com/p/506a06ae35ea 原文推荐 @developerWorks 开发者 为啥总是后来的让你感觉更好更强更完美? 每当你为你的项目新雇佣了一个开发者,TA总是能让你感觉到无所不能。 TA才接手这个项目三天的时间,却已经对工程提出了5个库的升级建议
阅读全文
摘要:并发之atomic与CAS自旋锁 通过前几章的讲解我们知道i++这种类似操作是不安全的。针对这种情况,我们可能会想到利用synchronize关键字实现线程同步,保证++操作的原子性,的确这是一种有效的方法,但我们还有一种选择 AtomicInteger。 AtomicInteger解析 源码 成员
阅读全文
摘要:并发之synchronized关键字的应用 synchronized关键字理论基础 前两章我们学习了下java内存模型的相关知识, 现在我们来讲讲逢并发必出现的synchronized关键字。 作用 synchronized是Java中的关键字,是一种同步锁。依赖JVM实现。 JMM对synchro
阅读全文
摘要:volatile关键字 volatile关键字是什么 在上一章我们讲到了并发的的三个概念,那么今天在讲解下在java中可以保证可见性和有序性的一个关键字。 volatile关键字 :当变量的值被该关键字修饰后该值任何读写操作对于其他线程是立即可见的。并且被关键字修饰后的变量被禁止重排序。 volat
阅读全文
摘要:死磕并发之可见性、有序性、原子性 原子性 原子性(Atomicity):一个操作是不可中断的,要么全部执行成功要么全部执行失败。 在典型的转账场景中,入账和出账操作要么同时成功,要么同时失败。其操作过程是一个整体不可分割,这种操作就是原子性的操作。 通过上面的伪代码来解释下什么是原子性操作。首先ja
阅读全文
摘要:Java内存模型JMM java内存模型定义 上一遍文章我们讲到了CPU缓存一致性以及内存屏障问题。那么Java作为一个跨平台的语言,它的实现要面对不同的底层硬件系统,设计一个中间层模型来屏蔽底层的硬件差异,给上层的开发者一个一致的使用接口。Java内存模型就是这样一个中间层的模型,它为程序员屏蔽了
阅读全文
摘要:CPU缓存一致性协议MESI CPU高速缓存(Cache Memory) CPU为何要有高速缓存 CPU在摩尔定律的指导下以每18个月翻一番的速度在发展,然而内存和硬盘的发展速度远远不及CPU。这就造成了高性能能的内存和硬盘价格及其昂贵。然而CPU的高度运算需要高速的数据。为了解决这个问题,CPU厂
阅读全文