
JMM
striveb
趁年轻,多吃点苦吧
展开
-
Java并发机制的底层实现原理
Java代码在编译后会变成Java字节码,字节码被类加载器加载到JVM里,JVM执行字节码,最终需要转化为汇编指令在CPU上执行,Java中所使用的并发机制依赖于JVM的实现和CPU的指令。一、volatile的应用1.volatile的定义与实现原理Java编程语言允许线程访问共享变量,为了确保共享变量能被准确和一致地更新,线程应该确保通过排他锁单独获得这个变量。Java语言提供了v...原创 2019-01-24 13:05:38 · 167 阅读 · 2 评论 -
java内存模型之重排序和顺序一致性
1 Java内存模型的基础1.1 并发编程模型的两个关键问题在并发编程中,需要处理两个关键问题:线程之间如何通信及线程之间如何同步(这里的线程是指并发执行的活动实体)。通信是指线程之间以何种机制来交换信息。在命令式编程中,线程之间的通信机制有两种:共享内存和消息传递。在共享内存的并发模型里,线程之间共享程序的公共状态,通过写-读内存中的公共状态进行隐式通信。在消息传递的并发模型里,...原创 2019-01-26 22:26:34 · 730 阅读 · 0 评论 -
java内存模型之volatile和锁的内存语义
1.volatile的内存语义1.1 volatile的特性可以把对volatile变量的单个读/写,看成是使用同一个锁对这些单个读/写操作做了同步。如下面的例子:class VolatileFeaturesExample { volatile long vl = 0L; // 使用volatile声明64位的long型变量 public void set(long l) { ...原创 2019-01-26 22:33:52 · 271 阅读 · 0 评论 -
Java内存模型之final的内存语义和happens-before
一、final域的内存语义1 final域的重排序规则对于final域,编译器和处理器要遵守两个重排序规则:1)在构造函数内对一个final域的写入,与随后把这个被构造对象的引用赋值给一个引用变量,这两个操作之间不能重排序。(即对构造函数的写入要在这个对象被其他线程看到之后)2)初次读一个包含final域的对象的引用,与随后初次读这个final域,这两个操作之间不能重排序。p...原创 2019-01-26 22:36:31 · 689 阅读 · 0 评论 -
java内存模型之双重检测锁和延迟初始化
1 双重检查锁定及其存在的问题在单例模式中,普通的单例模式是线程不安全的,如下://懒汉式,线程不安全public static class SingleTon2 { public static SingleTon2 instance = null; private SingleTon2() { } public static SingleTon2 ...原创 2019-01-26 22:38:09 · 246 阅读 · 0 评论