1. 可见性如果一个线程对共享变量值的修改,能够及时的被其他线程看到,叫做共享变量的可见性。如果一个变量同时在多个线程的工作内存中存在副本,那么这个变量就叫共享变量2. JMM(java内存模型)多个线程同时对主内存的一个共享变量进行读取和修改时,首先会读取这个变量到自己的工作线程成为一个副本中,改...
分类:
编程语言 时间:
2015-04-11 23:49:29
阅读次数:
243
Java虚拟机规范中试图定义一种java内存模型(java Memory Model,jmm)来屏蔽掉各种硬件和操作系统的内存访问差异,以实现让java程序在各种平台下都能达到一致的内存访问效果。Java内存模型的主要目标是定义程序中各个变量的访问规则,即在虚拟机中将变量存储到内存和从内存中取出变量...
分类:
编程语言 时间:
2015-04-11 17:38:52
阅读次数:
151
java中volatile关键字的使用涉及到java的内存模型,JMM。简单来说,每个线程都有一个本地内存(虚拟的),线程共享的变量存储在主内存中,主内存在堆中。内存访问方式如下图所示。volatile的作用总结如下:(1)可见性:对一个volatile变量的读取,总是能够看到(任意线程)对这个变量...
分类:
编程语言 时间:
2015-03-14 18:28:47
阅读次数:
311
1:在java中,所有实例域、静态域和数组元素存储在堆内存中,堆内存在线程之间共享。 2:局部变量、方法定义参数和异常处理器参数不会在线程之间共享 3:java线程之间的通信由Java内存模型(本文简称为JMM)控制,...
分类:
编程语言 时间:
2015-03-12 22:46:47
阅读次数:
211
参考:深入理解Java虚拟机:JVM高级特性与最佳实践(第2版)“内存模型”一词,可以理解为在特定的操作协议下,对特定的内存或高速缓存进行读写访问的过程抽象。Java内存模型(Java Memory Model, JMM)主内存与工作内存每条线程还有自己的工作内存,线程的工作内存中保存了被该线程使用...
分类:
编程语言 时间:
2015-03-06 20:43:30
阅读次数:
268
概念JMM:规定了jvm有主内存(Main Memory)和工作内存(Working Memory) ,主内存存放程序中所有的类实例、静态数据等变量,是多个线程共享的,而工作内存存放的是该线程从主内存中拷贝过来的变量以及访问方法所取得的局部变量, 是每个线程私有的其他线程不能访问,每个线程对变量的操...
分类:
编程语言 时间:
2015-03-05 12:32:19
阅读次数:
223
锁的释放-获取建立的happens before 关系锁是java并发编程中最重要的同步机制。锁除了让临界区互斥执行外,还可以让释放锁的线程向获取同一个锁的线程发送消息。下面是锁释放-获取的示例代码:[java]copyclass a=; writer(){} reader(){i=a;……}假设线...
分类:
编程语言 时间:
2015-02-09 18:08:33
阅读次数:
263
(一)java内存区域概况
jvm运行java程序时把所管理的内存分成几个部分:方法区、java栈、本地方法栈、java堆、pc程序计数器。
class字节码装载解析后,在多线程环境中,方法区和java堆数据共享,每个线程自带pc程序计数器和java栈,栈帧中包含方法的所有状态(局部变量、传参、返回值、运算中间结果等)。对共享数据需要考虑多线程并发问题。
更详细内容可参考《深入理解JVM虚拟...
分类:
编程语言 时间:
2015-01-20 10:34:31
阅读次数:
222
发生线程安全性的时机:
变量存储在内存中,变量的计算是在CUP中。如果线程A要对变量a进行计算,需要经过三步:1)把变量a从内存中读取到CPU中,2)对变量a进行计算,3)把变量a写入到内存中。当线程A执行到第二步时,线程B也要对变量a进行计算,这时B从内存中读取到的值就是线程A写入到内存之前的值,脏数据就此产生了。...
分类:
编程语言 时间:
2014-11-30 00:44:58
阅读次数:
199
Java内存模型是保障多线程安全的根基,这里不过认识型的理解总结并未深入研究。一、什么是内存模型,为什么须要它Java内存模型(Java Memory Model)并发相关的安全公布,同步策略的规范、一致性等都来自于JMM。1 平台的内存模型在架构定义的内存模型中将告诉应用程序能够从内存系统中获得如...
分类:
编程语言 时间:
2014-11-04 17:13:49
阅读次数:
204