并发编程
会飞的卡卡
这个作者很懒,什么都没留下…
展开
-
Java对象内存结构
对象内存结构分为三部分: 对象头 hash码,对象所属的年代,对象锁,锁状态标志,偏向锁(线程)ID,偏向时间,数组长度(数组对象)等 对象实际数据 即创建对象时,对象中成员变量,方法等 对齐填充 保证对象的大小是8字节的整数倍 MataData元数据指针——指向当前对象的Class对象 HotSpot虚拟机对象头MarkWord ...原创 2020-04-06 21:02:30 · 205 阅读 · 0 评论 -
并发编程——Java中的锁
为了访问临界资源访问的安全性,通过同步器将所有的并发访问编程串行化的访问。原创 2020-04-06 20:59:55 · 152 阅读 · 0 评论 -
单例模式——双检锁
对象创建过程 申请内存空间 address = allocate 实例化对象 instance 填充数据到内存空间 address = instance 无法保证上述的三步的原子性,也有可能产生指令重排(防止产生异常1,需要添加 volatile 关键字) public class LazySingleton { private static volatile LazyS...原创 2020-01-15 23:57:19 · 179 阅读 · 0 评论 -
并发编程——指令重排和内存屏障
一、指令重排 什么是指令重排? java语言规范规定JVM线程内部维持顺序化语义。即只要程序的最终结果与 它顺序化情况的结果相等,那么指令的执行顺序可以与代码顺序不一致,此过程叫指令的重排序。 指令重排发生阶段? 执行器编译阶段 CPU运行时 指令重排的意义 适当的对机器指令进行重排序,使机器指令能更符合CPU的执行特性,最大限度的发挥机器性能。 源码到最终执行的指令序列示...原创 2020-01-15 22:58:02 · 820 阅读 · 0 评论 -
并发编程——volatile
volatile是Java虚拟机提供的轻量级的同步机制 volatile语义有如下两个作用 可见性:保证被volatile修饰的共享变量对所有线程总数可见的,也就是当一个线程修改了一个被volatile修饰共享变量的值,新值总是可以被其他线程立即得知。 有序性:禁止指令重排序优化。 volatile缓存可见性实现原理 JMM内存交互层面:volatile修饰的变量的read、load...原创 2020-01-14 23:06:45 · 202 阅读 · 0 评论