A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© boboyuwu 高级黑马   /  2015-8-31 16:45  /  385 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

如果一个类中有一个int i=10;  注意这是类中的成员变量,然后类中有个方法输出这个i的值,我想问一下, 假如输出这个方法前cpu被别的线程抢走了,并且别的线程改变了这个类中成员变量的值,假设变成了i=9,那么 当前面一个线程执行时输出的还是10还是9呢,这个问题的核心就在于,方法执行时,里面使用到的类中的成员变量就不变了还是随着成员变量的变化而自动变化。

可能有点抽象和饶,看不懂的同学就算了

5 个回复

倒序浏览
会变吧,这不就是同步里面的问题吗
回复 使用道具 举报
alogol 发表于 2015-8-31 17:41
会变吧,这不就是同步里面的问题吗

我就不明白我运行时候出现这么个现象      这个现象只有一点说明线程2判断>0后再输出count的时候执行权被线程1夺走,线程1执行了4次后,线程2取得执行权,由于之前类中的成员变量i=100加载到了线程2中的run方法里,所以线程2取得执行权的之后直接打印一下售出票100,这是我的理解,这也是为什么100张票会卖出2次,这样的话就说明当成员变量加载到方法后,不管类中成员变量的值怎么变,方法里加载后的值都是不变的   ,这只是我的猜想我等会逐步验证一下

111111111111111111111111111111111111.png (10.01 KB, 下载次数: 0)

111111111111111111111111111111111111.png
回复 使用道具 举报
boboyuwu 发表于 2015-8-31 17:54
我就不明白我运行时候出现这么个现象      这个现象只有一点说明线程2判断>0后再输出count的时候执行权被 ...

啊啊,那就应该是不变的,数据已经载入内存,但是没有取得cpu执行权这样?
回复 使用道具 举报
基本数据类型和引用数据类型是不同的啊
回复 使用道具 举报
这得看他们作用的是不是堆内存里的同一个对象
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马