と の使用wait()
に問題がありnotify()
ます。一種のランデブーが必要です。
これは、小さなコードの一部です。
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()
。
方法がわからない