Java基础

Java内存模型

2017-02-04  本文已影响62人  小鱼嘻嘻
Java内存模型学习
内存模型

Java内存模型主要由JMM控制,JMM决定了一个线程对共享变量的写入何时对另一个线程可见。
JMM定义了线程和主内的抽象关系:线程的共享变量存在主存,每一个线程都有私有的本地内存。

指令重排序

编译器和处理器常常会对指令进行重排序

内存屏障

JMM的处理器的重排序规则要求对Java编译器在生成指令序列时,插入特定的内存屏障,禁止指令重排序来保证内存一致性。

Happens-before 规则

在JMM中,如果一个操作执行的结果需要对另一个操作可见,那么这两个操作之间必须存在happens-before关系。

as-if-serial语义

as-if-serial语义的意思是:不管怎么重排序,单线程的程序执行结果不能被改变。

顺序一致性内存模型

1 一个线程中的所有操作必须按照程序的顺序来执行
2 所有线程都只能看到一个单一的操作执行顺序,在顺序一致性的内存模型中,每一个操作都必须原子性执行且立即对所有线程可见。

volitale的内存语义

当声明一个共享变量为volitale后,对这个变量的读写将会很特别。

volitale对应的内存语义:
当写一个volitale变量时,JMM会把该线程对应的本地内存中的共享变量的值刷新到主内存。

final域的内存语义

参考资料:
Java并发编程的艺术

上一篇 下一篇

猜你喜欢

热点阅读