黑马程序员技术交流社区

标题: 多线程对象内存分配——实现Runnable接口,接口子类对象中... [打印本页]

作者: 赵许星    时间: 2013-10-28 16:05
标题: 多线程对象内存分配——实现Runnable接口,接口子类对象中...
本帖最后由 赵许星 于 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. }
复制代码

作者: 李文帅    时间: 2013-10-28 19:52
是的,因为在创建线程时,是把同一个接口子类对象作为实参传递给各个线程的构造方法,所以创建的这几个线程是对同一个实例对象进行操作;
当各个线程开启时,都会运行同一个实例对象的run()方法,而run()方法中是对该实例对象的属性i进行操作,所以说该变量i被多个线程共享了。
这是我自己的理解希望对你有所帮助...
作者: 喂,咱不离!    时间: 2013-10-28 22:36
你是不是怎么调用的
作者: 喂,咱不离!    时间: 2013-10-28 22:42
你是不是这么调用的?
demo d = new demo();
new Thread(d).start();
new Thread(d).start();
new Thread(d).start();

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

给你举个例子,这个demo好比是你,这个 i 好比你身上的100块钱,那么run()就相当于你去坐公交车,逛超市,逛书店等等消费了,而new Thread()就是调用了一下你身上花钱的这个方法。
那么你想,你人只有一个,这钱是不是在不断的减少,这不是就是在共享着你身上的属性吗???
精辟吧!!!
作者: 黄炳期    时间: 2013-10-28 22:53
典型的例子就是卖火车票系统。
火车票就只有100张,5个窗口同时在卖,每个窗口卖出一张,都是从这100张票中减掉的,卖一张少一张。所以,这100张票要同时被这5个窗口所共享。
作者: To    时间: 2013-10-29 21:40
楼主你好,如果问题已解决请将帖子状态修改为提问结束,
如果未解决请继续追问,谢谢合作
修改方法请看解释帖:http://bbs.itheima.com/thread-89313-1-1.html




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2