日期:2014-05-20  浏览次数:20623 次

深入讨论一下java的多线程是如何访问成员变量的。
 这几天我在研究学习多线程,讨论说不上,只能说和大家学习学习,我下面有一幅图:
这幅图说明的是一个成员变量与一个线程的关系,那么多个线程与多个成员变量他们的关系应该是怎么样的呢,希望能用图来表示,那么就更清晰一些了
多线程 java

------解决方案--------------------
http://ifeve.com/java-memory-model-0/
http://www.ticmy.com/?p=315
http://ifeve.com/jmm-cookbook/


以上文章是楼主想看的
------解决方案--------------------
图中有两个很重要的字 "副本" 

多个线程访问一个成员变量时  每个线程都会得到一个该变量的副本  在自己的线程的栈中保存、计算 以提高速度。  但是这样就会有同步的问题了。   当一个线程修改了自己栈内副本的值  还没有立即将同步到主存中, 其他线程再来获取主存中的该变量时  就会得到过期数据  , 为了解决这种问题 可以使用synchronized对该变量的操作同步 , 或使用volatile关键字声明该变量为易变对象  这样的话 每个线程就不会创建副本到自己的栈中  而是直接操作主存