비트교육_단기과정
스레드 동기화(ATM 번갈아서) : 마기창
ELpsy
2022. 7. 5. 16:37
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(); } } | cs |