理解 happens-before ========================= 备忘,欢迎指出错误。 hb法则 ------- 多线程有两个基本的问题,原子性和可见性,而happens-before规则是用来解决**可见性问题**的: > 在时间上,动作A发生在动作...
分类:
移动开发 时间:
2014-12-22 11:24:43
阅读次数:
192
在前几篇将Java内存模型的那些事基本上把这个域底层的概念都解释清楚了,聊聊高并发(三十五)Java内存模型那些事(三)理解内存屏障 这篇分析了在X86平台下,volatile,synchronized, CAS操作都是基于Lock前缀的汇编指令来实现的,关于Lock指令有两个要点:
1. lock会锁总线,总线是互斥的,所以lock后面的写操作会写入缓存和内存,可以理解为在lock后面的写缓存...
分类:
移动开发 时间:
2014-12-19 13:08:25
阅读次数:
307
内存屏障:使内存数据对CPU核可见的技术被称为内存屏障或内存栅栏。
happen-before 原则:两个操作之间具有happens-before 关系,就必须要求前一个操作的结果对后一个操作可见。
常见的happens-before规则:
程序顺序规则:一个线程中的每个操作,happens- before 于该线程中的任意后续操作。
监视器锁规则:对一个监视器锁的解锁,happe...
分类:
移动开发 时间:
2014-12-05 15:32:50
阅读次数:
524
在这个小结里面重点讨论原子操作的原理和设计思想。由于在下一个章节中会谈到锁机制,因此此小节中会适当引入锁的概念。在Java Concurrency in Practice中是这样定义线程安全的:当多个线程访问一个类时,如果不用考虑这些线程在运行时环境下的调度和交替运行,并且不需要额外的同步及在调用方...
分类:
移动开发 时间:
2014-12-02 22:28:48
阅读次数:
259
这是一份完整的Java 并发整理笔记,记录了我最近几年学习Java并发的一些心得和体会。J.U.C 整体认识原子操作 part 1 从AtomicInteger开始原子操作 part 2 数组、引用的原子操作原子操作 part 3 指令重排序与happens-before法则原子操作 part 4 ...
分类:
编程语言 时间:
2014-12-02 22:12:28
阅读次数:
254
指令重排序对主存的一次访问一般花费硬件的数百次时钟周期。处理器通过缓存(caching)能够从数量级上降低内存延迟的成本这些缓存为了性能重新排列待定内存操作的顺序。也就是说,程序的读写操作不一定会按照它要求处理器的顺序执行。重排序的背景我们知道现代CPU的主频越来越高,与cache的交互次数也越来越...
分类:
移动开发 时间:
2014-11-06 12:32:02
阅读次数:
262
转:http://www.blogjava.net/xylz/archive/2010/07/03/325168.html在这个小结里面重点讨论原子操作的原理和设计思想。由于在下一个章节中会谈到锁机制,因此此小节中会适当引入锁的概念。在Java Concurrency in Practice中是这样...
分类:
移动开发 时间:
2014-10-17 18:27:07
阅读次数:
233
并发编程
线程通信
共享内存和消息传递
线程同步
控制不同线程的执行顺序
java并发
基于共享内存模型指令重排序
编译器重排序处理器重排序
cpu重排序写缓存区(cache、寄存器)
内存屏障顺序一致性与Happens-before执行结果有序性
volatile
解决内存可见性问题
锁
lock 显示锁
可中断可定时...
分类:
编程语言 时间:
2014-07-25 11:24:11
阅读次数:
275
JMM规范:The rules for happens-before are:Program order rule. Each action in a thread happens-before every action in that thread that comes later in the ...
分类:
其他好文 时间:
2014-06-21 06:49:15
阅读次数:
350