
JUC
java.util.concurrent
众所周知的Java并发包,这里我将Javadoc的源码翻译并提供详细的代码注释,提供实战示例,并进行源码分析,目的是让自己彻底搞定JUC。
YellowStar5
风物长宜放眼量
展开
-
synchronized关键字的内存语义及实现
什么是线程安全根据Java并发编程实战2.1 的定义:当多个线程访问某个类时,不管运行是环境采用何种调度方式或者这些线程将如何交替执行,并且在主调代码中不需要任何额外的同步或协同,这个类都能表现出正确的行为,那么就称这个类是线程安全的。换句话说:线程安全是一个多线程环境下正确性的概念,也就是保证多线程环境下共享的、可修改的状态的正确性,这里的状态反映在程序中其实可以看作是数据。tips:1.在线程安全类中封装了必要的同步机制,因此客户端(使用者)无须进一步采取同步措施。2.无状态对象一定是线.原创 2020-09-05 17:24:09 · 657 阅读 · 0 评论 -
JSR-133 FAQ 中英对照版翻译
由于本人能力有限,如有错误,烦请指出。原文地址:https://www.cs.umd.edu/~pugh/java/memoryModel/jsr-133-faq.html我博客上中英对照版地址:https://yellowstar5.cn/direct/jsr-133-faq-chinese.html翻译 2020-09-02 11:06:16 · 356 阅读 · 0 评论 -
Synchronization 中英文对照翻译
原文地址:https://wiki.openjdk.java.net/display/HotSpot/SynchronizationSynchronization and Object Locking (同步和对象锁定)Java 同步 synchronized 重量级锁 轻量级锁 偏向锁翻译 2020-09-02 10:43:17 · 772 阅读 · 0 评论 -
The JSR-133 Cookbook for Compiler Writers 中英对照版翻译
由于本人能力有限,如有错误,烦请指出。后面我会将文档放在个人博客上。翻译 2020-09-14 16:11:00 · 981 阅读 · 0 评论 -
Java 原子类的使用及原理分析
看完了前面两篇文章,一篇是Unsafe中的CAS,另一篇是volatile,再来学习今天的Java原子类可以说是水到渠成。1.atomic包介绍在java.util.concurrent.atomic包下,主要分为四类:原子更新基本类型:AtomicInteger, AtomicBoolean, AtomicLong 对底层的volatile修饰的基本类型进行CAS操作。原子更新数组:AtomicIntegerArray,AtomicLongArray,AtomicReferenceArra原创 2020-08-16 22:37:15 · 1114 阅读 · 0 评论 -
volatile域的语义及其实现
0.背景-缓存一致性首先需要了解下缓存一致性,可以参看维基百科的词条,也可以看medium上的这篇文章1.JMM提供的volatile域的语义1.1 可见性根据JSR-133 FAQ中的说明,volatile字段是用于在线程之间传递状态的特殊字段。 每次读取volatile时,都会看到任意一个线程对该volatile的最后一次写入。 实际上,程序员将volatile字段指定为不能接受由于缓存或重排序而导致的“过时”值的字段。 禁止编译器和运行时在寄存器中分配它们。 它们还必须确保在写入后将其从高速缓原创 2020-08-08 21:58:13 · 431 阅读 · 0 评论 -
Unsafe介绍及CAS原理解析
0.Unsafe介绍JavaDoc说, Unsafe提供了一组用于执行底层的,不安全操作的方法。那么具体有哪些方法呢,我画了一张图。可以看到Unsafe中提供了CAS,内存操作,线程调度,本机信息,Class相关方法,查看和设置某个对象或字段,内存分配和释放相关操作,内存地址获取相关方法。我自己抽空对上述方法进行了注释,你可以在这里看到。那么如何使用Unsafe呢?下面我们就来说说如何获取Unsafe并操作。1.获取Unsafe实例如下所述,由于Unsafe.getUnsafe会判断调用类的类原创 2020-07-26 21:23:59 · 1321 阅读 · 2 评论