2015年6月2日
摘要: 关键字volatile可以说是Java虚拟机提供的最轻量级的同步机制。当一个变量定义为volatile之后,它将具备两种特性,第一是保证此变量对所有线程的可见性,这里的“可见性”是指当一条线程修改了这个变量的值,新值对于其他线程来说是可以立即得知的。而普通变量不能做到这一点,普通变量的值在线程间传递... 阅读全文
posted @ 2015-06-02 14:07 飞机说之代码也疯狂 阅读(216) 评论(0) 推荐(0) 编辑
摘要: 如果Java内存模型中所有的有序性都仅仅依靠volatile和synchronized来完成,那么一些操作将会变得很繁琐,但是我们在编写Java程序时并没有感觉到这一点,这是因为Java语言中有一个”先行发生(happens-before)“的原则。这个原则非常重要,它是判断数据是否存在竞争、线程是... 阅读全文
posted @ 2015-06-02 14:01 飞机说之代码也疯狂 阅读(243) 评论(0) 推荐(0) 编辑
摘要: 原子性(Atomicity):由Java内存模型来直接保证的原子性变量操作包括read、load、assign、use、store和write,我们大致可以认为基本类型的访问读写是具备原子性的。如果应用场景还需要一个更大范围的原子性保证,Java内存模型还提供了lock和unlock操作来满足这种需... 阅读全文
posted @ 2015-06-02 13:55 飞机说之代码也疯狂 阅读(220) 评论(0) 推荐(0) 编辑
摘要: 在Java中,所有实例域、静态域和数组元素存储在堆内存中,堆内存在线程之间共享。局部变量、方法定义参数和异常处理器参数不会在线程之间共享,他们不会有内存可见性问题,也不受内存模型的影响。Java线程之间的通信由Java内存模型(JMM)控制,JMM决定一个线程对共享变量的写入何时对另一个线程可见。从... 阅读全文
posted @ 2015-06-02 13:38 飞机说之代码也疯狂 阅读(116) 评论(0) 推荐(0) 编辑