스레드를 공부중인데 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이 나오는데 머가 어떻게 된건지 영문을 모르겠네요.




할때마다 순서가 변경되고요.
자신의 생각대로 안되는게 맞는 겁니다.