wait()와 notify()에 관해서요.
호시
이전에 블로킹과 논블로킹 질문을 올려놓고 생각난게
데이터를 받으면 notify시키고 데이터가 없으면 wait()시키는 방법이 생각이났어요. 그래서 만들어보려는데
옛날부터 방식이 잘못된건지 제가 하면 wait(), notify에서 에러만 나더라구요 아래와같은 형식으로 할생각인데
어디가 문제인지좀 지적해주세요;
public class Sum extends Thread{
////메인메서드
public static void main(String[] args){
try{
Sum a = new Sum(); //쓰레드를 동작시켜줌
while(true){
Thread.sleep(1000);
a.notify(); //1초에한번씩 a쓰레드를wait해줌
}
}catch(Exception e){
e.printStackTrace();
}
}
//객체변수
public static Sum instance;
//생성자
public Sum() {
instance = this;
start();
}
//Runnable호출
public void run(){
try{
while(true){
System.out.println(------------------------------------------------);
instance.wait(); //한번 루팅할때마다 wait()시켜줌
}
}catch(Exception e){
e.printStackTrace();
}
}
}
-
승아
ㅋㅋㅋㅋ 그런가 봐요. ㅋ
-
날샘
감사합니다!! ㅋㅋ api에서 모니터 확보가 어찌고저찌고 하는데 무슨말인지 몰랐었어요 ㅋㅋ; synchronized가 모니터 확보 메서드였나보군요;
-
이든샘
wait와 notify를 하기 전에, 먼저
synchronized(a) {
a.wait();
}
뭐 요딴식으로 해줘야 할겁니다. ㅎ