package HeadFirstJava;
class BankAccount {
private int balance = 100;
public int getBalance() {
return balance;
}
public void withdraw(int amount) {
balance = balance - amount;
}
}
class BobAndMonica implements Runnable {
private BankAccount account = new BankAccount();
public static void main(String[] args) {
BobAndMonica theJob = new BobAndMonica();
Thread one = new Thread(theJob);
Thread two = new Thread(theJob);
one.setName("Bob");
two.setName("Monica");
one.start();
two.start();
}
@Override
public void run() {
// TODO Auto-generated method stub
for (int x = 0; x < 10; x++) {
makeWithdrawl(10);
}
if (account.getBalance() < 0) {
System.out.println("Overdrawn");
}
}
private synchronized void makeWithdrawl(int amount) {
if (account.getBalance() >= amount) {
System.out.println(Thread.currentThread().getName() + " is about to withdraw");
try {
System.out.println(Thread.currentThread().getName() + " is going to sleep");
Thread.sleep(500);
} catch(InterruptedException ex) {ex.printStackTrace();}
System.out.println(Thread.currentThread().getName() + " woke up.");
account.withdraw(amount);
System.out.println(Thread.currentThread().getName() + " completes the withdrawl");
} else {
System.out.println("Sorry, not enough for " + Thread.currentThread().getName());
}
}
}
Bob is about to withdraw
Bob is going to sleep
Bob woke up.
Bob completes the withdrawl
Monica is about to withdraw
Monica is going to sleep
Monica woke up.
Monica completes the withdrawl
Bob is about to withdraw
Bob is going to sleep
Bob woke up.
Bob completes the withdrawl
Monica is about to withdraw
Monica is going to sleep
Monica woke up.
Monica completes the withdrawl
Bob is about to withdraw
Bob is going to sleep
Bob woke up.
Bob completes the withdrawl
Monica is about to withdraw
Monica is going to sleep
Monica woke up.
Monica completes the withdrawl
Monica is about to withdraw
Monica is going to sleep
Monica woke up.
Monica completes the withdrawl
Bob is about to withdraw
Bob is going to sleep
Bob woke up.
Bob completes the withdrawl
Monica is about to withdraw
Monica is going to sleep
Monica woke up.
Monica completes the withdrawl
Bob is about to withdraw
Bob is going to sleep
Bob woke up.
Bob completes the withdrawl
Sorry, not enough for Monica
Sorry, not enough for Monica
Sorry, not enough for Monica
Sorry, not enough for Monica
Sorry, not enough for Monica
Sorry, not enough for Bob
Sorry, not enough for Bob
Sorry, not enough for Bob
Sorry, not enough for Bob
Sorry, not enough for Bob