package week_3;
class ATM implements Runnable {
private long depositeMoney = 10000;
public long getDepositeMoney() {
return depositeMoney;
}
public void setDepositeMoney(long depositeMoney) {
this.depositeMoney = depositeMoney;
}
@Override
public void run() {
synchronized (this) {
for (int i = 0; i < 10; i++) {
try {
notifyAll(); // 실행대기 상태중인 모든 스레드의 상태를 Runnable 상태로 전환
wait(); // 해당 쓰레드를 대기상태로
Thread.sleep(1000);
} catch (Exception e) {
e.printStackTrace();
}
if (getDepositeMoney() <= 0)
break;
withDraw(1000);
}
}
}
public void withDraw(long howMuch) {
if (getDepositeMoney() > 0) {
depositeMoney -= howMuch;
System.out.print(Thread.currentThread().getName() + " ==> ");
System.out.println("pay : " + getDepositeMoney());
} else {
System.out.println(Thread.currentThread().getName() + " , ");
System.out.println("end");
}
}
}
public class SynchronizedEx {
public static void main(String[] args) {
ATM atn = new ATM();
Thread mom = new Thread(atn, "mom");
Thread son = new Thread(atn, "son");
mom.start();
son.start();
}
}