package thread_ex;
class ATM implements Runnable {
private long depositeMoney = 10000;
public void run() {
synchronized (this) {
for (int i = 0; i < 10; i++) {
notify(); // 스레드를 실행대기 상태로 변경
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
if (getDepositeMoney() <= 0)
break;
withDraw(1000);
try {
wait(); // 대기상태로 변경
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
public void withDraw(long howMuch) {
if (getDepositeMoney() > 0) {
depositeMoney -= howMuch;
System.out.print(Thread.currentThread().getName() + " , ");
System.out.printf("잔액 : %,d 원 %n", getDepositeMoney());
} else {
System.out.print(Thread.currentThread().getName() + " , ");
System.out.println("잔액이 부족합니다.");
}
}
public long getDepositeMoney() {
return depositeMoney;
}
}
public class SynchronizedEx {
public static void main(String[] args) {
ATM atm = new ATM();
Thread mother = new Thread(atm, "mother");
Thread son = new Thread(atm, "son");
mother.start();
son.start();
}
}
반응형
'Java > eclipse 연습' 카테고리의 다른 글
(JavaScript)계산기 (0) | 2020.08.20 |
---|---|
(JavaScript)현재 시간(1초마다 갱신) (0) | 2020.08.20 |
(Java)동적바인딩 예제 (0) | 2020.08.11 |
(Java)for문 사각형접기/ 이중for문 구구단 (0) | 2020.08.04 |
(Java)switch문을 이용한 간단한 연산기 (0) | 2020.08.04 |