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

© 北极£莜蓝 中级黑马   /  2014-7-2 17:58  /  1513 人查看  /  12 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

public class BankConsumerDemo {
public static void main(String[] args) {
  //创建自定义对象
  Consumer c = new Consumer();
  //Consumer c2 = new Consumer();
//Consumer c3 = new Consumer();
  
  //创建线程, 把自定义对象当做参数来传递
  Thread t1 = new Thread(c,"第一个人");
  Thread t2 = new Thread(c,"第二个人");
// Thread t2 = new Thread(c2,"第二个人");
Thread t3 = new Thread(c,"第三个人");
//  Thread t3 = new Thread(c3,"第三个人");
  //开启线程
  t1.start();
  t2.start();
  t3.start();
  
}
}
这里为什么不是创建三个自定义对象,然后分别把三个对象当做参数传递,创建线程,开启线程

12 个回复

倒序浏览
问得好。。同问。。
回复 使用道具 举报
楼主代码不发完整,线程运行的代码哪去了?问题也没问清楚,你这程序不是只传递一个对象吗,另外俩个被注释了
回复 使用道具 举报
dispensable 来自手机 中级黑马 2014-7-2 18:33:04
板凳
你这例子不完整,还是哪个视频我没看过?之所以这样是因为:为了保证几个线程之间操作的数据是同一个,如果创建几个对象,分别当做参数,那几个线程之间操作的只是自己参数对象的数据而已,跟单线程没区别,多线程第一个要素就是首先要有共享数据
回复 使用道具 举报
dispensable 发表于 2014-7-2 18:33
你这例子不完整,还是哪个视频我没看过?之所以这样是因为:为了保证几个线程之间操作的数据是同一个,如果 ...

多线程不一定要共享数据吧,虽然说他们争抢的是CPU的执行权,也不一定要共享数据吧,   
回复 使用道具 举报
陈云阳 发表于 2014-7-2 18:24
楼主代码不发完整,线程运行的代码哪去了?问题也没问清楚,你这程序不是只传递一个对象吗,另外俩个被注释 ...

其他的代码不重要,我只是想问下,他们的区别
回复 使用道具 举报
不知道  ⊙﹏⊙b汗
回复 使用道具 举报
北极£莜蓝 发表于 2014-7-2 20:25
其他的代码不重要,我只是想问下,他们的区别

你不发完整的代码,谁知道你想知道什么,我就写个int i=0,我想知道反射是什么,有用吗,,,
回复 使用道具 举报
你要是定义三个对象,那你还是访问同一个数据嘛  没有共同数据访问不算是多线程把 我是这么理解的
回复 使用道具 举报
dispensable 发表于 2014-7-2 18:33
你这例子不完整,还是哪个视频我没看过?之所以这样是因为:为了保证几个线程之间操作的数据是同一个,如果 ...

突发奇想的,多线程不一定要共享数据吧,
回复 使用道具 举报
这里是为对象c创建3个线程
回复 使用道具 举报
北极£莜蓝 发表于 2014-7-2 20:25
其他的代码不重要,我只是想问下,他们的区别

区别?还是没懂, 你是说3个线程的区别吗?  没什么区别啊,就相当于发100张传单, 一个人发会比较慢,3个人发就比较快,
回复 使用道具 举报
本帖最后由 EarlyHeart 于 2014-7-3 04:36 编辑

首先多线程可以没有共享数据,只是很多情况下是共享数据的。
楼主举得这个例子我想应该是:三个人去银行存钱,他们各自拿着自己要存的钱,但是银行业务繁忙,所以大家都只能"抢着"一点一点的存了(抢cpu时间片),这里并没有公共的数据,三个Runnable对象的数据都是只属于自己的,因此楼主的代码中注掉的代码对于上述情况才是正确的。
这跟卖票的例子不一样,卖票的例子中的票是公共的,是共享数据,而这里的钱是每个线程自己的,抢的只是时间片,执行机会,并不涉及共享数据的。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马