阳哥笔记里面的例子基本是视频里面的原例子,这题应该也是,我认为逻辑上有问题,如果我说错,望指出
原文如下
需求:储户,两个,每个都到银行存钱,每次存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对象
|
|