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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 赵许星 于 2013-10-31 14:21 编辑

看了毕老师java视频,变量i,怎么被多线程共享了??搞不明白
  1. class demo implements Runnable
  2. {
  3.     private int i=100;
  4.     public void run()
  5.     {
  6.         for(i>0)
  7.              i--;
  8.      }

  9. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1

查看全部评分

6 个回复

倒序浏览
是的,因为在创建线程时,是把同一个接口子类对象作为实参传递给各个线程的构造方法,所以创建的这几个线程是对同一个实例对象进行操作;
当各个线程开启时,都会运行同一个实例对象的run()方法,而run()方法中是对该实例对象的属性i进行操作,所以说该变量i被多个线程共享了。
这是我自己的理解希望对你有所帮助...

评分

参与人数 1黑马币 +6 收起 理由
黄炳期 + 6 赞一个!

查看全部评分

回复 使用道具 举报
你是不是怎么调用的
回复 使用道具 举报
你是不是这么调用的?
demo d = new demo();
new Thread(d).start();
new Thread(d).start();
new Thread(d).start();

说白了就是,多个线程调用同一个对象。

给你举个例子,这个demo好比是你,这个 i 好比你身上的100块钱,那么run()就相当于你去坐公交车,逛超市,逛书店等等消费了,而new Thread()就是调用了一下你身上花钱的这个方法。
那么你想,你人只有一个,这钱是不是在不断的减少,这不是就是在共享着你身上的属性吗???
精辟吧!!!

点评

good!  发表于 2013-10-29 12:39

评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1 给力~

查看全部评分

回复 使用道具 举报
典型的例子就是卖火车票系统。
火车票就只有100张,5个窗口同时在卖,每个窗口卖出一张,都是从这100张票中减掉的,卖一张少一张。所以,这100张票要同时被这5个窗口所共享。
回复 使用道具 举报
To 金牌黑马 2013-10-29 21:40:30
地板
楼主你好,如果问题已解决请将帖子状态修改为提问结束,
如果未解决请继续追问,谢谢合作
修改方法请看解释帖:http://bbs.itheima.com/thread-89313-1-1.html
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马