线程的随机执行
public class Bank {
//账户
private String account;
//余额
private int balance;
public Bank(String account, int balance) {
this.account = account;
this.balance = balance;
}
public String getAccount() {
return account;
}
public void setAccount(String account) {
this.account = account;
}
public int getBalance() {
return balance;
}
public void setBalance(int balance) {
this.balance = balance;
}
@Override
public String toString() {
return "银行{" +
"账户:" + account +
", 余额:" + balance +
'}';
}
public void save(int money){
int balance = getBalance();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
balance += money;
setBalance(balance);
System.out.println("存款后的金额"+getBalance());
}
public void take(int money){
int balance = getBalance();
balance -= money;
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
setBalance(balance);
System.out.println("取款后的金额"+getBalance());
}
}1,
取款后的帐户余额:800
存款后的账户余额为:800
老师,这种情况的出现的原因
首先是存款线程先获取CPU使用权,然后阻塞,取款线程获取CPU使用权并修改余额为800,然后取款线程也阻塞,存款线程获取CPU使用权,修改金额并统过set方法设置成员属性为1100,然后取款线程获取CPU使用权,通过set方法修改成员属性为800,最后分别执行存取款中的输出语句就都是800了
9
收起
正在回答 回答被采纳积分+1
java工程师2020版
- 参与学习 人
- 提交作业 9410 份
- 解答问题 16556 个
综合就业常年第一,编程排行常年霸榜,无需脱产即可学习,北上广深月薪过万 无论你是未就业的学生还是想转行的在职人员,不需要基础,只要你有梦想,想高薪
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星