银行有一个账户,有两个储户分别向这个账户存3000元,每次存1000元,分三次存储。每次存完打印账户余额。
问题:该程序是否有安全问题,如果有,如何解决?
【提示】
1,明确哪些代码是多线程运行代码,须写入run()方法
2,明确什么是共享数据。
3,明确多线程运行代码中哪些语句是操作共享数据的。
"拓展问题:可否实现两个储产交替存钱的操作
代码实现:
public class startApplication { public static void main(String[] args) { Account account=new Account(0); Customer c1=new Customer(account); Customer c2=new Customer(account); c1.setName("甲"); c2.setName("乙"); c1.start(); c2.start(); } } class Account{ private double money; public Account(double money){ this.money=money; } //存钱 public synchronized void deposit(double savemoney){ if(savemoney>0){ money+=savemoney; try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(Thread.currentThread().getName()+":开始存钱,余额为:"+money); } } } class Customer extends Thread{ private Account account; public Customer(Account account){ this.account=account; } @Override public void run() { for(int i=0;i<3;i++){ account.deposit(1000); } } }
结果:
甲:开始存钱,余额为:1000.0
乙:开始存钱,余额为:2000.0
乙:开始存钱,余额为:3000.0
甲:开始存钱,余额为:4000.0
甲:开始存钱,余额为:5000.0
乙:开始存钱,余额为:6000.0