jvm规范:定义了 Class文件类型 运行时数据 帧栈 虚拟机的启动 虚拟机的指令集 vm指令集:类型转换,出栈入栈操作,运算,流程控制,函数调用。 jvm需要对java Library提供以下支持: --反射java.lang.reflect --ClassLoader --初始化class和i ...
分类:
编程语言 时间:
2019-03-24 09:51:57
阅读次数:
180
并发编程中,需要控制各线程间的原子性、可见性、有序性。为了保证这些特性,java提供了一系列工具和jar包,本文是对volatile关键字的一些基本理解。
分类:
编程语言 时间:
2019-03-22 09:13:31
阅读次数:
214
1.同步 synchronized 2.轮询 while volatile 3.wait/notify机制 syncrhoized加锁的线程的Object类的wait()/notify()/notifyAll() ReentrantLock类加锁的线程的Condition类的await()/sign ...
分类:
编程语言 时间:
2019-03-21 23:07:29
阅读次数:
258
一.happens-before原则 同一个线程中的,前面的操作 happens-before 后续的操作。(即单线程内按代码顺序执行。但是,在不影响在单线程环境执行结果的前提下,编译器和处理器可以进行重排序,这是合法的。换句话说,这一是规则无法保证编译重排和指令重排)。 1. 监视器上的解锁操作 ...
分类:
移动开发 时间:
2019-03-21 13:12:12
阅读次数:
231
相信很多中高级的 Java 面试者都遇到过这个问题,很多对这个不是很清楚的肯定是一脸蒙逼。内心肯定还在质疑,i++ 居然还有线程安全问题?只能说自己了解的不够多,自己的水平有限。 先来看下面的示例来验证下 i++ 到底是不是线程安全的。 1000个线程,每个线程对共享变量 count 进行 1000 ...
分类:
编程语言 时间:
2019-03-20 01:08:43
阅读次数:
137
volatile的适用场景 模式 #1:状态标志 也许实现 volatile 变量的规范使用仅仅是使用一个布尔状态标志,用于指示发生了一个重要的一次性事件,例如完成初始化或请求停机。 [java] view plain copy volatile boolean shutdownRequested; ...
分类:
其他好文 时间:
2019-03-20 00:52:27
阅读次数:
117
Volatile关键字实现原理 1、认识volatile关键字 程序举例 用一个线程读数据,一个线程改数据 存在数据的不一致性 2、机器硬件CPU与JMM (1)CPU Cache模型 (2)CPU缓存的一致性问题 解决方案: 1)总线加锁(粒度太大) 2)MESI() Cache line CPU ...
分类:
其他好文 时间:
2019-03-19 21:30:25
阅读次数:
153
Java代码在编译后会变成Java字节码,字节码被类加载起加载到JVM里,JVM执行字节码,最终需要转化为汇编指令在CPU上执行, Java中所使用的并发机制依赖于JVM的实现和CPU的指令. 一、volatile的应用 在多处理器开发中保证共享变量的 "可见性", 可见性的意思是: 当一个线程修改 ...
分类:
编程语言 时间:
2019-03-19 01:34:40
阅读次数:
239
Java的内存模型 Java内存模型(JMM)是一个抽象的模型。决定了线程主要定义了线程和内存间的抽象关系:主内存存放的是线程共享变量,每个线程有自己的工作内存,存放变量的副本,只能对副本进行读写,副本的变量再刷新到主内存中。具体体现为多核CPU,每核有一个高速缓存,每个核的线程对高速缓存读写,并且 ...
分类:
移动开发 时间:
2019-03-18 01:04:29
阅读次数:
253
1.饿汉式 这种写法的单例模式是最简单的设计模式,基本上大部分开发者都会写。 2.懒汉式 3.懒汉式+同步 4.Dubbo Check 5.Volatile + Dubbo Check 6.Holder方式 7.枚举方式 ...
分类:
编程语言 时间:
2019-03-14 20:07:10
阅读次数:
187