银行有一个账户,有两个储户分别向这个账户存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
本文分析了一个Java程序,其中两个客户同时向银行账户存款可能导致的并发问题,并讨论了如何通过synchronized关键字和适当的数据同步来确保账户余额正确。还探讨了如何实现交替存钱操作以改进并发控制。
3195

被折叠的 条评论
为什么被折叠?



