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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© run_wind 中级黑马   /  2014-11-25 21:33  /  1337 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

/*
需求:
银行有一个金库。
有两个储户分别存300员,每次存100,存3次。
*/
class Bank
{
        private int sum;
        public synchronized void add(int num)//同步函数,如果参数没有就默认是this.如果被静态修饰就是XX.class。因为静态没有this
        {
                sum += num;
                System.out.println("sum = "+sum);
        }
}

class Cus implements Runnable
{
        private Bank b = new Bank();

        public void run()
        {
                for (int i=0;i<3 ;i++ )
                {
                        b.add(100);                       
                }
        }
}

class BankDemo
{
        public static void main(String[] args)
        {
                Cus c = new Cus();
                Thread c1 = new Thread(c);
                Thread c2 = new Thread(c);
                c1.start();
                c2.start();
        }
}
        private Bank b = new Bank();这句话,为什么要private修饰?
        还有关于这个题目的思想,是怎么想的。为什么是由Bank同步,线程由Cus创建多个。不可以Cus普通类,Bank实现Runnable吗?感觉这样写好绕,因为从题意来分析,两个客户,应该是两个对象才对,不应该是两个线程,这样感觉是一个人同时在用两个窗口存钱。但是自己手打了一下发现如果客户创建两个对象,那么银行就会创建两个,不符合条件了。这个题应该从哪入手考虑

6 个回复

倒序浏览
还有,如果换我的思考方式,如果正确,那么代码该怎么写呢
回复 使用道具 举报
Bank应该理解为账户,而不是银行,所以是Cus的私有属性
回复 使用道具 举报
lh994749769 发表于 2014-11-25 22:49
Bank应该理解为账户,而不是银行,所以是Cus的私有属性

没看清、、、、、、上面说的作废
回复 使用道具 举报
这个题只是要练习线程的使用,没必要太认真吧
如果真要切合实际,应该在add传入账号信息和金额才对,而cus应该定义一个私有账户类,而不是建立一个Bank,当使用银行的时候调用Bank.add(账户类,金额)才比较符合实际,只有这样两个人才能往一个账户中存钱吧,如果将上面的例子定义两个cus那么他们的并不是向一个银行中存钱,而是两个

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1

查看全部评分

回复 使用道具 举报
如果上面代码非要理解的话:bank是一个账户而cus更像是一个只有一个账户的银行,而两个线程是这个银行向这个账户的两个存钱行为
回复 使用道具 举报
FlyFish 中级黑马 2014-11-26 09:45:11
7#
Bank是银行,Cus理解为银行卡,多张银行卡同时向银行转账
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马