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()
の終わりを実行する前に、「ねえ、私は終わりだ」言うまで待つことです。 notifyAll()
にもかかわらず、wait()
は永遠に続きます。
私は
コードには多くのエラーがあります。最も重要なのは、スレッドが1つしかないことです。メインスレッドです。並行処理についてのJavaチュートリアルを読んでください。http://docs.oracle.com/javase/tutorial/essential/concurrency/このチュートリアルのすべてを理解したら、Thread.join()の使用を検討してください。 –