1.volatile本质:是java虚拟机(JVM)当前变量在工作内存中的值是不确定的,需要从主内存中读取;synchronized则是锁定当前的变量,只有当前线程可以访问到该变量,其他的线程将会被阻塞。 2.volatile只能实现变量的修改可见性,并不能保证原子性;而synchronized则可 ...
分类:
其他好文 时间:
2019-02-20 13:08:10
阅读次数:
136
概念: volatile关键字,官方解释:volatile可以保证 可见性、顺序性、一致性 。 可见性:volatile修饰的对象在加载时会告知JVM,对象在CPU的缓存上对多个线程是同时可见的。 顺序性:这里有JVM的内存屏障的概念,简单理解为:可以保证线程操作对象时是顺序执行的,详细了解可以自行 ...
分类:
编程语言 时间:
2019-02-15 15:49:25
阅读次数:
279
参考https://www.cnblogs.com/zhengbin/p/5654805.html 阅读目录 一、基本概念 二、Volatile原理 一、基本概念 先补充一下概念:Java 内存模型中的可见性、原子性和有序性。 可见性: 可见性是一种复杂的属性,因为可见性中的错误总是会违背我们的直觉 ...
分类:
编程语言 时间:
2019-02-14 11:45:20
阅读次数:
148
1.AQS基本属性CAS算法:CAS,CPU指令,在大多数处理器架构,包括IA32、Space中采用的都是CAS指令,CAS的语义是“我认为V的值应该为A,如果是,那么将V的值更新为B,否则不修改并告诉V的值实际为多少”,CAS是项乐观锁技术,当多个线程尝试使用CAS同时更新同一个变量时,只有其中一个线程能更新变量的值,而其它线程都失败,失败的线程并不会被挂起,而是被告知这次竞争中失败,并可以再次
分类:
其他好文 时间:
2019-02-11 20:12:19
阅读次数:
198
目录 1.什么是JMM 2.JMM的主内存和工作内存 3.JMM如何解决可见性问题-指令重排序 4.Volatile 十、JMM(Java内存模型)(暂时没有理解) 1.什么是JMM 2.JMM的主内存和工作内存 (1)主内存 (2)工作内存 (3)主内存和工作内存数据存储类型以及操作方式归纳 (4 ...
分类:
编程语言 时间:
2019-02-11 20:00:02
阅读次数:
213
(1)Java中的主要同步机制是关键字synchronized,它提供了一种独占的加锁方式,但“同步”这个术语还包括volatile类型的变量,显式锁以及原子变量。 (2)线程安全性:当多个线程访问某个类时,这个类始终都能表现出正确的行为,那么就称这个类是线程安全的。 (3)要避免竞态条件问题,就必 ...
分类:
编程语言 时间:
2019-02-11 14:09:40
阅读次数:
153
1. 三大性质简介 在并发编程中分析线程安全的问题时往往需要切入点,那就是两大核心:JMM抽象内存模型以及happens-before规则(在这篇文章中已经经过了),三条性质:原子性,有序性和可见性。关于synchronized和volatile已经讨论过了,就想着将并发编程中这两大神器在 原子性, ...
分类:
其他好文 时间:
2019-02-08 20:07:16
阅读次数:
186
1. volatile简介 在上一篇文章中我们深入理解了java关键字synchronized,我们知道在java中还有一大神器就是关键volatile,可以说是和synchronized各领风骚,其中奥妙,我们来共同探讨下。 通过上一篇的文章我们了解到synchronized是阻塞式同步,在线程竞 ...
分类:
其他好文 时间:
2019-02-08 19:50:51
阅读次数:
140
volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在Java 5之后,volatile关键字才得以重获生机。 volatile关键字虽然从字面上理解起来比较简单,但是要用好不是一件容易的事情。 由于 ...
分类:
编程语言 时间:
2019-02-07 22:15:30
阅读次数:
149