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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

阳哥笔记里面的例子基本是视频里面的原例子,这题应该也是,我认为逻辑上有问题,如果我说错,望指出
原文如下
需求:储户,两个,每个都到银行存钱,每次存100,共存三次。
代码:
01.  classBank{
02.  privateintsum;
03.  publicvoidadd(intnum){
04.  synchronized(this){
05.  sum=sum+num;
06.  System.out.println("sum="+sum);
07.  }
08.  }
09.  }
10.
11.  classCusimplementsRunnable{
12.  privateBankb=newBank();
13.  publicvoidrun(){
14.  for(intx=0;x<3;x++){
15.  b.add(100);
16.  }
17.  }
18.  }
19.
20.  classBankDemo{
21.  publicstaticvoidmain(String[]args){
22.  Cusc=newCus();
23.  Threadt1=newThread(c);
24.  Threadt2=newThread(c);
25.  t1.start();
26.  t2.start();
27.  }
28.  }


这个代码打印出来结果没问题
num=100
num=200
num=300
num=400
num=500
num=600
但个人认为是逻辑有问题,这里是等于同一个人,在同一家银行,分开两个窗口同时存钱,存三次,每次100块,而不是需求要求
所以根据这个逻辑,我作出了以下代码修改,以便符合逻辑:


class Bank
{
        private int sum;
        public void save(int num) {
                synchronized (this) {
                        sum+=num;
                System.out.println(Thread.currentThread().getName()+sum);       
                }
        }
}
class Cus implements Runnable
{
        private int count=300;
        private Bank mBank;
        public Cus(Bank mBank) {
                this.mBank=mBank;
        }
        @Override
        public void run() {
                while(true)
                if (count>0) {
                        mBank.save(100);
                        count-=100;
                }
        }
}
class TestDemo{
        public static void main(String[] args) {
                Bank mBank = new Bank();
                Cus mCus1 = new Cus(mBank);
                Cus mCus2 = new Cus(mBank);
                new Thread(mCus1).start();
                new Thread(mCus2).start();
        }
}

一家银行,一个bank对象,两个储户,两个cus对象

1 个回复

倒序浏览
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马