스레드를 공부중인데 wait, notify가 이론은 이해가 되는데 실행이 결과가 제 생각과 다르게 나와 헤깔리네요
제가 하고 있는 예제가 이상한거 같에요. 스레드에서 적당한 조건이 될때 한 스레드를 wait 를 통해 대기를

시키고 notify를 이용하여 다른 어떤 한 스레드를 작동시킨다인것 같은데.

스레드가 a,b,c 가 있다면 a.start, b.start , c.start 할때 synchronized 를 통해 번갈아가며 실행이된다.

그렇다면 다같이 번갈아 실행이 된다는 말인거 같은데 어느것이 대기를 타고 어느것이 실행되는지도 헤깔리

네요 지금 보고 있는 예제는 아래거인데 이상한거 같에요 적당히 좋은 예제와 설명쫌 부탁드립니다.


package exam01;

public class ThreadTest {//main
 public static void main(String[] args) {
  RunnableEx101 r= new RunnableEx101();
  Thread t1 = new Thread(r,"t1");
  Thread t2 = new Thread(r,"t2");
  t1.start();
  t2.start();  
 }
}

class Account {// 잔고 임계영역
 int balance=1000;
 public synchronized void withdraw(int money){
  while(balance<money){
   try{wait();}catch(InterruptedException e){}
  }
  balance-=money;
 } 
 public synchronized void deposit(int money){
  notify();
  balance+=money;
  
 }
}

class RunnableEx101 implements Runnable{//출금 클래스?
 Account acc = new Account();
 public void run() {
  while(acc.balance>0){
   int money=(int)(Math.random()*3+1)*100;
   System.out.println(Thread.currentThread().getName()+" money : "+money);
   acc.withdraw(money);
   System.out.println(Thread.currentThread().getName()+" bal: "+acc.balance);
  }
 }
}

결과 :

t2 money : 300
t1 money : 300
t1 bal: 400
t1 money : 100
t1 bal: 300
t1 money : 300
t1 bal: 0
t2 bal: 700
마지막에 700이 나오는데 머가 어떻게 된건지 영문을 모르겠네요.