wait()
및 notify()
을 사용하는 데 문제가 있습니다. rendez-vous의 종류가 있어야합니다. 여기 작동하지 않는 Java의 Rendez-Vous 종류
class A {
private Rdv r;
public A(Rdv r) {
this.r = r;
}
public void someMethod() {
synchronized(r) {
r.wait();
}
// ***** some stuff never reached*****
}
}
class Rdv {
private int added;
private int limit;
public Rdv(int limit) {
this.added = 0;
this.limit = limit;
}
public void add() {
this.added++;
if(this.added == this.limit) {
synchronized(this) {
this.notifyAll();
}
}
}
}
class Main {
public static void main(String[] args) {
Rdv rdv = new Rdv(4);
new Runnable() {
public void run() {
A a = new A(rdv);
a.someMethod();
}
}.run();
rdv.add();
rdv.add();
rdv.add();
rdv.add();
}
}
아이디어는 4 개 스레드가 someMethod()
의 끝을 실행하기 전에 "이봐, 난 끝났어요"말할 때까지 기다리는 것입니다. 그러나 wait()
은 notifyAll()
에도 불구하고 영원히 지속됩니다.
나는
코드에 많은 오류가 있습니다. 가장 중요한 것은 하나의 스레드 즉 주 스레드 만 가지고 있다는 것입니다. 동시성에 대한 Java 자습서를 읽으십시오. http://docs.oracle.com/javase/tutorial/essential/concurrency/이 자습서의 모든 내용을 이해했으면 Thread.join() 사용을 고려하십시오. –