JAVA学习--JVM
neo33233
.
展开
-
java内存模型之三--顺序一致性
数据竞争与顺序一致性保证 当程序未正确同步时,就会存在数据竞争。java内存模型规范对数据竞争的定义如下: 在一个线程中写一个变量, 在另一个线程读同一个变量, 而且写和读没有通过同步来排序。 当代码中包含数据竞争时,程序的执行往往产生违反直觉的结果(前一章的示例正是如此)。如果一个多线程程序能正确同步,这个程序将是一个没有数据竞争的程序。转载 2015-03-02 14:50:42 · 363 阅读 · 0 评论 -
java内存模型之一---基础
【转自网络,如有侵权请通知我,我会及时删除】 一:并发编程模型的分类 在并发编程中,我们需要处理两个关键问题:线程之间如何通信及线程之间如何同步(这里的线程是指并发执行的活动实体)。通信是指线程之间以何种机制来交换信息。在命令式编程中,线程之间的通信机制有两种:共享内存和消息传递。 在共享内存的并发模型里,线程之间共享程序的公共状态,线程之间通过写-读内存中的公共状态来隐式进行通转载 2015-03-02 14:45:27 · 426 阅读 · 0 评论 -
java内存模型之二---重排序
数据依赖性 如果两个操作访问同一个变量,且这两个操作中有一个为写操作,此时这两个操作之间就存在数据依赖性。数据依赖分下列三种类型: 名称 代码示例 说明 写后读 a= 1;b = a; 写一个变量之后,再读这个位置。 写后写 a= 1;a = 2;转载 2015-03-02 14:49:54 · 371 阅读 · 0 评论 -
java内存模型之四---volatile
volatile的特性 当我们声明共享变量为volatile后,对这个变量的读/写将会很特别。理解volatile特性的一个好方法是:把对volatile变量的单个读/写,看成是使用同一个监视器锁对这些单个读/写操作做了同步。下面我们通过具体的示例来说明,请看下面的示例代码: 如上面示例程序所示,对一个volatile变量的单个读/写操作,与对一个普通变量的读/写操作使用同一个转载 2015-03-02 14:52:35 · 383 阅读 · 0 评论