先上 代码 后提问
Main.java
public class Main {
public static void main(String[] args) {
Bank b = new Bank();
new Thread(b,"女").start();
new Thread(b,"男").start();
}
}
Bank1.java
public class Bank1 implements Runnable{
private int money = 500;
private int count = 0;
@Override
public void run() {
synchronized (this){
for (int i = 1; i < 6; i++) {
if (count > 4){
System.out.println(Thread.currentThread().getName() +":第 "+ i + " : 次取款失败!");
}else{
System.out.println(Thread.currentThread().getName() +":第 "+ i + " : 次取款开始!");
synchronized (this){
money -= 100;
count ++;
}
}
}
}
}
}```
### Bank2.java
```java
public class Bank implements Runnable{
private int money = 500;
private int count = 0;
@Override
public void run() {
for (int i = 1; i < 6; i++) {
if (count > 4){
System.out.println(Thread.currentThread().getName() +":第 "+ i + " : 次取款失败!");
}else{
System.out.println(Thread.currentThread().getName() +":第 "+ i + " : 次取款开始!");
synchronized (this){
money -= 100;
count ++;
}
}
}
}
}
问题
Bank2
中取款的 次数 会比 Bank1
多一次,题目本意是 男女混合取款 5
次总计 500
元
Bank1
中外层的 synchronized
会使 先开始的进程一直取款无法交替取款
源题
张三和他的妻子各拥有一张一行卡和存折,可以对同一个银行账号进行取款的操作,现银行存款为 500
RMB,每人个取款 5
次,在取款中存在网络延迟,现 使用多线程模拟这个过程
。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于