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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 张森 于 2013-1-13 11:59 编辑

下面是毕老师写2个储户去存钱的问题?
  1. /*
  2.         需求:
  3.         银行有一个金库,有两个用户存钱,每次存100,存3次。
  4. */
  5. class Bank{
  6.         private int sum ;
  7.         public void add(int sum){
  8.                 sum = sum+n;
  9.                 System.out.println(sum);
  10.         }
  11. }

  12. class Cus implements Runnable{
  13.         private Bank bank = new Bank();
  14.         public void run(){   //当存钱的时候会造成共享数据sum多线程错误。
  15.                 for(int i=0;i<3;i++){
  16.                         bank.add(100);
  17.                 }
  18.         }
  19. }
  20. public class BankDemo{
  21.         public static void main(String[] args){
  22.                 Cus c = new Cus();
  23.                 Thread t1 = new Thread(c).start();
  24.                 Thread t2 = new Thread(c).start();
  25.         }
  26. }
复制代码
毕老师的意思两个储户去存钱,
但我怎么看都是一个储户去存钱,他只new了一个人啊, 我感觉怎么是一个人,划分为二,同一时间去两个柜台同时存钱啊?大家好好看看这里,确实没明白。毕老师第11天11个视频

评分

参与人数 1技术分 +1 收起 理由
金鑫 + 1

查看全部评分

7 个回复

倒序浏览
周末都没有人吗
回复 使用道具 举报
我怎么看着程序有问题呢? sum = sum+n;n在哪呢?for(int i=0;i<3;i++){

                        bank.add(100);

                }

它是执行了三次,应该说是存了三次吧?
生成了两个线程t1和t2按道理就是两个客户,各自存钱
回复 使用道具 举报
李海鹏 发表于 2013-1-13 12:39
我怎么看着程序有问题呢? sum = sum+n;n在哪呢?for(int i=0;i

但是是一个人啊   是一个人同时去两个柜台往一个账户存钱
是不是这样的呢
回复 使用道具 举报
从程序上看,代码逻辑确实有错误,不记得这个题在哪了,LZ好好在研究研究吧
回复 使用道具 举报
Cus c = new Cus();
                Cus1 c1 = new Cus1();
                Thread t1 = new Thread(c);
                Thread t2 = new Thread(c1);
                t1.start();
                t2.start();
我明白 楼主的意思。
你可以这样写加一个Cus1类对象。
毕老师 这样的代码是指1个人,分不同时间和批次去存的,是演示的一个账户钱的累计是否同步。
如果这样改,就成了2个线程的,2个账户。。。都是存进的300,不是一个账户的钱。
你可以打印一下看看。
回复 使用道具 举报
张森 中级黑马 2013-1-13 14:15:12
7#
王少雷 发表于 2013-1-13 14:05
Cus c = new Cus();
                Cus1 c1 = new Cus1();
                Thread t1 = new Thread(c);

是的 我也是则这个意思i
回复 使用道具 举报
可以这样理解:Bank类看成金库,Cus看成银行,线程看成是人(几个线程就是几个人)
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马