- 浏览: 3510 次
- 性别:
最新评论
文章列表
查阅地址:http://ifeve.com/java-memory-model-4/
volatile特性
1、相当于对volatile共享变量做了同步
2、volatile变量的写对读具有可见性
3、单个volatile变量具有原子性,但类似volatile++不具有可见性
volatile类型变量对内存可见性的 ...
查阅地址:http://ifeve.com/java-memory-model-3/
数据竞争
1、当一个线程写数据的同时,另一个线程在读这个数据,并且没有进行同步,就会产生数据竞争
2、如果程序正确同步,那么程序执行会具有顺序一致性,它与顺序一致性的执行结果相同
顺序一致性
1、顺序一致性是理想模型
2、无论同步与否,每个操作的执行结果会对后来要执行的操作可见
JMM未同步执行特征
1、JMM只保证最小的安全性:数据不会无中生有,它会在初始化时清空数据,并初始化为(0,null,false)
2、JMM不保证单线程中的执行是按顺序执行的,可能已经做了重排序
...
查阅地址为:http://ifeve.com/java-memory-model-2/
数据依赖性
1、单线程中,前后两个操作如果有数据依赖:写后读,读后写,写后写,编译器和处理器将不做重排序
as-if-serial
1、as-if-seral的意思是无论采取怎样的序列执行,单线程的执行结果都不会变,处理器可以重排序执行的顺序,它为程序员提供一种幻境:程序是按顺序执行的,但其实编译器和处理器由于性能上的考虑已经做了重排序
程序执行顺序
1、如果程序的执行满足as-if-serial,即使a happens before b,a执行的结果不需要对b可见,JMM会认为这个执行是合法 ...
最近对Java内存模型比较感兴趣,跟着程晓明的深入理解Java内存模型学习了下,查阅地址为:
http://ifeve.com/java-memory-model-1/#header
基本模型:
1、线程之间的通信有两种:共享内存和消息传递,Java使用的是共享内存的形式进行通信
2、Java中,局部变量,方法定义参数不会被共享,所以不会有可见性的问题,存放在堆内存的变量才会被共享,会有可见性问题
3、Java内存模型(简称JMM)定义了线程和主线程的关系,每个线程都有一个缓冲池,线程之间通信的过程为:A线程把本地内存池的信息刷新到主内存中,B线程到主内存中取数据,并更新自己的本地内 ...
struts2的执行过程
1.首先进入StrutsPrepareAndExecuteFilter这个filter,执行doFilter方法
public void doFilter(ServletRequest req,ServletResponse res, FilterChain chain)
throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResp ...