黑马程序员技术交流社区

标题: 毕老师是不是讲错了? [打印本页]

作者: 李辉    时间: 2013-3-6 01:32
标题: 毕老师是不是讲错了?
    今天学习毕老师的第11天第11课《多线程-同步函数》感觉毕老师这节课讲得有问题。主要问题是需求与程序不相符:
   1.程序中只在主线程中声明了Cus c一个客户,而不是两个。程序实际上是一个客户用两个线程各自存了300块。结果是这个客户的账户存了600块。
   2.既然Bank是银行类,Cus是客户类,客户类里面怎么能包含银行呢?
   对毕老师的程序,我觉得下面的理解更合适:
   Bank类改为账户类,每个客户都有一个银行账户。一个客户可以并行的向自己的账户存钱,比如自己用银行卡存钱,爱人用存折存钱。

   如果还是想按照毕老师的需求来写程序,我觉得应该让Bank实现Runnable接口。
作者: 杜超    时间: 2013-3-6 08:53
这样理解:bank代表银行,银行下肯定会有很多银行账户,如果每一个客户都设置一个银行账户,有很多客户,岂不是要设置很多账户,这样多线程就复杂了,不是基础班能解决的。
毕老师讲的是bank接受的是客户存的总数,每存一次bank就加一次,这样便于理解。
问题1:Cus c代表的是储户,是一个储户这个群体,不是具体的哪一个储户。而线程才代表储户,一个线程代表一个,两个表示2个储户在存钱。
问题2:Cus类里定义Bank b = new Bank();这时建立bank银行引用,确立储户和银行有关系,是接受储户存的钱用得,如果没有这个,储户存的钱银行是无法接收到的。

需求:
银行有一个金库。
有两个储户分别存300员,每次存100,存3次。
看需求:银行就一个金库,两个储户,多线程当然是储户了。

作者: 谢洋    时间: 2013-3-6 09:03
本帖最后由 谢洋 于 2013-3-6 09:04 编辑

1.程序中只在主线程中声明了Cus c一个客户,而不是两个。程序实际上是一个客户用两个线程各自存了300块。
你理解错吧,你都说主线程中只声明一个客户,那来的两个线程?不是一个线程代表一个客户?
2、Bank类改为账户类,每个客户都有一个银行账户。一个客户可以并行的向自己的账户存钱,比如自己用银行卡存钱,爱人用存折存钱。
如果样子设计,每个客户的账户是相互独立的,就没涉及到数据共享;
毕老师为了让数据共享达到共享的效果,而把银行中所有客户的钱看成一个整体,
这样来看不管什么客户来,都是往同一个地方存取,
最好把源代码贴出来,这样大家才看得比较清楚

作者: 李辉    时间: 2013-3-6 12:55
杜超 发表于 2013-3-6 08:53
这样理解:bank代表银行,银行下肯定会有很多银行账户,如果每一个客户都设置一个银行账户,有很多客户,岂 ...

   我不同意你的观点:
  1.没见过用线程来代表储户的,如果这样的话,那储户的其他信息往哪里存放?比如姓名、住址等。
  2.储户和银行是得有关系,但是绝不是储户包含银行这种关系! 我已经说过解决方案了,可以把银行类改为账户,这个例子里可以不要银行类。
作者: 李辉    时间: 2013-3-6 13:06
谢洋 发表于 2013-3-6 09:03
1.程序中只在主线程中声明了Cus c一个客户,而不是两个。程序实际上是一个客户用两个线程各自存了300块。
...

1.看来你也是认为一个线程代表一个客户,你觉得合适吗?
2.我说的改正方式当然涉及数据共享了,银行卡存钱 和 存折存钱 这两个线程共享客户的账户。
3.我说的改正方式就是把Bank类的类名改了,代码视频里有,就不用在这写了。

关键问题是对那个程序的理解!
作者: 谢洋    时间: 2013-3-6 13:18
李辉 发表于 2013-3-6 12:55
我不同意你的观点:
  1.没见过用线程来代表储户的,如果这样的话,那储户的其他信息往哪里存放?比如 ...

我发现你用的完全是面向过程的思维去理解的,
如果我们用面向对象的思维方式去想:那么我们只管银行就是一个具有存钱功能的对象,
而不管他里面到底是怎么存,用什么方法把不同客户区分的,一旦这样子想问题就会变得很杂了
作者: 谢洋    时间: 2013-3-6 13:35
谢洋 发表于 2013-3-6 13:18
我发现你用的完全是面向过程的思维去理解的,
如果我们用面向对象的思维方式去想:那么我们只管银行就是 ...

按你上面所说的,你一直把问题细分,就是一种面向过程
的思维方式,问题分得太细,易容走进里面出不来了.
我并有相信老说的   就是真理
作者: 杜超    时间: 2013-3-6 18:32
李辉 发表于 2013-3-6 12:55
我不同意你的观点:
  1.没见过用线程来代表储户的,如果这样的话,那储户的其他信息往哪里存放?比如 ...

1,线程只是代表储户存钱的过程,姓名、住址,这又关系到了其他函数,毕老师讲的没有涉及到这两个关系,所以老师没讲错,再加入姓名住址,其他信息,这问题又复杂化了,这个我就解决不了了。
2,储户的确不是包含银行的,这我认同。不过吧不用银行类,用账户类,你的意思是,客户往账户存钱,账户的钱自增。这我也明白,只不过这也不算老师讲错了,老师只是没用到账户而已。至于怎么改,我好想无能为力了。




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