1. Description
- Two threads share the same data. Every time you use data, you need to first determine whether it is within a reasonable range.
- Use the
Thread.sleep
function to block the thread every time the data is used
2. Code
class BankAccount {
private int balance = 100;
public int getBalance() {
return balance;
}
public void withdraw(int amount) {
balance = balance - amount;
}
}
public class RyanAndMonicaJob implements Runnable {
private BankAccount account = new BankAccount();
public static void main (String[] args) {
RyanAndMonicaJob theJob = new RyanAndMonicaJob();
Thread one = new Thread(theJob);
Thread two = new Thread(theJob);
one.setName("Ryan");
two.setName("Monica");
one.start();
two.start();
}
public void run() {
for (int x = 0; x < 10; x++) {
makeWithdrawal(10);
if(account.getBalance() < 0) {
System.out.println("Overdrawn!");
}
}
}
private void makeWithdrawal(int amount) {
String currentThread = Thread.currentThread().getName();
if(account.getBalance() >= amount) {
System.out.println(currentThread + "is about to withdraw");
try{
System.out.println(currentThread + " is going to sleep");
Thread.sleep(500);
} catch(InterruptedException ex) {
ex.printStackTrace();
}
System.out.println(currentThread + " woke up.");
account.withdraw(amount);
System.out.println(currentThread + " completes the withdrawl");
} else {
System.out.println("Sorry, not enough for " + currentThread);
}
}
}
```![在这里插入图片描述](https://img-blog.csdnimg.cn/20201113004828229.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3BpYW5vOTQyNQ==,size_16,color_FFFFFF,t_70#pic_center)