새소식

인기 검색어

비트교육_단기과정

스레드 동기화(ATM 번갈아서) : 마기창

  • -
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
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.