`
benx
  • 浏览: 272929 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

线程理解

    博客分类:
  • java
阅读更多
public class Type {

    private String name; //实例变量

    private static String age; //类变量

    public void method() {

        String str = "xiongjin";// 本地变量

    }

}


实例变量:每个对象都有自己的实例变量,且不能访问其他对象的实例变量

类变量:每个类的对象都可以访问的变量

本地变量:只在该变量的方法或快中有效



在多线程中,类变量、实例变量存放在主内存中,本地变量放在堆栈中;

若如果多个Thread拥有同一个实例变量,比如ThreadA和ThreadB同時擁有ClassA的對象IntanceA,ClassA中有实例变量money值为100,这时money在主内存中,ThradA和ThradB的缓存中各有money的副本,现在ThradA先修改money的值为+100,在修改的过程中(ThreadA还没有把money同步进主内存)ThreadB(此时主内存中的money值为100)也对money+100,结果是ThreadA和ThreadB各对money+100,但是实际上是只+100了一次,要解决此问题就必须实行同步





Java的内存模型JMM(Java Memory Model)JMM主要是为了规定了线程和内存之间的一些关系。根据JMM的设计,系统存在一个主内存(Main Memory),Java中所有实例变量都储存在主存中,对于所有线程都是共享的。每条线程都有自己的工作内存(Working Memory),工作内存由缓存和堆栈两部分组成,缓存中保存的是主存中变量的拷贝,缓存可能并不总和主存同步,也就是缓存中变量的修改可能没有立刻写到主存中;堆栈中保存的是线程的局部变量,线程之间无法相互直接访问堆栈中的变量
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics