深入讨论一下java的多线程是如何访问成员变量的。
这几天我在研究学习多线程,讨论说不上,只能说和大家学习学习,我下面有一幅图:
这幅图说明的是一个成员变量与一个线程的关系,那么多个线程与多个成员变量他们的关系应该是怎么样的呢,希望能用图来表示,那么就更清晰一些了 多线程 java
[解决办法]
http://ifeve.com/java-memory-model-0/
http://www.ticmy.com/?p=315
http://ifeve.com/jmm-cookbook/
以上文章是楼主想看的
[解决办法]
图中有两个很重要的字 "副本"
多个线程访问一个成员变量时 每个线程都会得到一个该变量的副本 在自己的线程的栈中保存、计算 以提高速度。 但是这样就会有同步的问题了。 当一个线程修改了自己栈内副本的值 还没有立即将同步到主存中, 其他线程再来获取主存中的该变量时 就会得到过期数据 , 为了解决这种问题 可以使用synchronized对该变量的操作同步 , 或使用volatile关键字声明该变量为易变对象 这样的话 每个线程就不会创建副本到自己的栈中 而是直接操作主存