1. Descripción
- Dos subprocesos comparten los mismos datos. Cada vez que utilice datos, primero debe determinar si están dentro de un rango razonable.
- Utilice la
Thread.sleep
función para bloquear el hilo cada vez que se utilizan los datos
2. Código
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)