《高级--Java内存与多线程》 本帖最后由 iamczr 于 2010-11-04 16:33:21 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 第一个问题,主内存包括了堆内存和方法区,还应该包括其他所有变量啊。第二个问题,我举例说明:主内存存在变量A=0; 线程1:需要用到A,于是把主内存中的变量A复制过来为A',假设操作之后A'=1; 线程2:也需要用A,虽然此时线程1中的A'=1,但线程2是从主存中复制的A=0, 即线程2中,A''=0。 理解是:每个线程有自己的栈和pc,方法调用通过栈帧的pop和push来实现。栈帧里面有局部变量、操作数等等。这些栈都可以访问一个JVM实例里面的方法区和堆。不知道这样理解对不对,期待大牛。 1. 所有数据都在主内存中。2. 线程运行时从主内存取数据,这里才到栈中,最后刷新回主内存(同多CPU cache模型),JAVA语言规范定义了6个原子操作:load,save,read,write,use,assign,用于线程内存同步。如果有synchronized,每个同步变量的操作先上锁-->read-->use/assign-->write-->解锁,完成同步过程。如果没有synchronized,不会上锁,都在线程本地操作,不保证数据的一致性。 推荐你看几个文章:JLS 第三版第17章——权威之作jsr133——JMM规范 GUI的有关问题 fileinputstream如何构造 初学者问一个关于泛型的小问题 GUI面板滚动条不能出现 一个applet的问题。请各位大哥帮忙看一下。谢谢 java 怎么能成为exe文件 为什么老是连不上MYSQL? 我在Thinking in Java中遇到的Jni问题! tomcat4中怎样设置classpath? 为什么在jbuilder3中编译的部分applet在浏览器中不能运行? 关于Interface使用的理解 import9.par是什么意思
第二个问题,我举例说明:主内存存在变量A=0;
线程1:需要用到A,于是把主内存中的变量A复制过来为A',假设操作之后A'=1;
线程2:也需要用A,虽然此时线程1中的A'=1,但线程2是从主存中复制的A=0,
即线程2中,A''=0。
2. 线程运行时从主内存取数据,这里才到栈中,最后刷新回主内存(同多CPU cache模型),JAVA语言规范定义了6个原子操作:load,save,read,write,use,assign,用于线程内存同步。如果有synchronized,每个同步变量的操作先上锁-->read-->use/assign-->write-->解锁,完成同步过程。如果没有synchronized,不会上锁,都在线程本地操作,不保证数据的一致性。