目录 指令重排序 指令重排序 java编程语言的语义允许编译器和微处理器执行优化 //重排序后的代码出现死循环 public class VisibilityDemo { private boolean flag = true; public static void main(String[] ar ...
分类:
编程语言 时间:
2020-07-18 15:58:57
阅读次数:
69
1、synchronized 是悲观锁,属于抢占式,会引起其他线程阻塞。 2、volatile 提供多线程共享变量可见性和禁止指令重排序优化。 3、CAS 是基于冲突检测的乐观锁(非阻塞) ...
分类:
其他好文 时间:
2020-07-07 19:28:08
阅读次数:
65
java基础篇 java基础 目录 1、java是一种什么语言,jdk,jre,jvm三者的区别 2、java 1.5之后的三大版本 3、java跨平台及其原理 4、java 语言的特点 5、什么是字节码,字节码的好处 6、java 和 c++ 的区别 7、java的三大特性 8、java中的基本数 ...
分类:
编程语言 时间:
2020-06-28 11:11:14
阅读次数:
78
一、volitail起到什么作用 1.可变的,跟踪变量的变化,保证线程的可见性. 1.1堆内存是所有线程共享的内存,每个线程都有自己专属的工作内存,当某一线程要访问某一个值的时候,都会copy一份到自己的空间,单线程要改变这个值的时候首先会对自己空间里的值进行改变, 什么时候写回堆的时候不好控制.其 ...
分类:
其他好文 时间:
2020-06-23 00:40:30
阅读次数:
165
##目录 多线程需要解决的问题 线程之间的通信 线程之间的同步 Java内存模型 内存间的交互操作 指令屏障 happens-before规则 指令重排序 从源程序到字节指令的重排序 as-if-serial语义 程序顺序规则 顺序一致性模型 顺序一致性模型特性 顺序一致性模型特性 当程序未正确同步 ...
分类:
编程语言 时间:
2020-06-22 01:23:32
阅读次数:
56
本篇文章从底层原理层面深度剖析volatile关键字是如何实现内存可见性的,同时引入了Java内存模型、指令重排序以及内存屏障等知识点作为原理分析的知识支撑。 阅读本文之前,推荐大家先阅读作者之前的一篇关于happens-before的文章,这样更有助于大家对volatile关键字底层原理的理解。 ...
分类:
其他好文 时间:
2020-06-18 19:29:06
阅读次数:
49
参考:https://mp.weixin.qq.com/s/DZkGRTan2qSzJoDAx7QJag 建议阅读:《深入理解Java虚拟机》相关章节 多线程下的 原子性 可见性 指令重排序 无法保证(单线程 可以保证) static int mainMemoryVariable=0; 线程1: m ...
分类:
编程语言 时间:
2020-05-21 21:06:23
阅读次数:
50
java最新面试题及答案2020 面试题汇总之 并发锁 并发,锁 1.volatile关键字, Lock 并发编程中:原子性问题,可见性问题,有序性问题。 volatile关键字能保证可见性,字能禁止指令重排序,但是不能保证原子性。可见性只能保证每次读取的是最新的值,但是volatile没办法保证对 ...
分类:
编程语言 时间:
2020-05-17 21:58:38
阅读次数:
153
内存分配的两种方式 指针碰撞法 维护一个指针,指针左边为已分配的内存,右边为空闲内存,动态调整指针。在右边进行分配。 要求内存规整。 空闲表法 维护一张表,记录哪里分配了哪里没有分配。分配的时候找能存放对象的空间分配即可。 要求内存不规整。 内存分配并发问题(补充内容,需要掌握 在创建对象的时候有一 ...
分类:
其他好文 时间:
2020-05-17 17:31:35
阅读次数:
69
所谓并发编程,所谓有其三 一、高速缓存的两面性 cpu->高速缓存->内存 高速缓存:平衡cpu和内存之间的速度差异,变量从内存首先加载到高速缓存然后以供cpu计算使用。 对于同一个cpu来说,存储于其高速缓存中的变量,对于使用其时间碎片的线程来说,都是原子可见的,任何的变更都能及时的感知到其所被使 ...
分类:
编程语言 时间:
2020-05-14 22:40:48
阅读次数:
94