私の Java コードでは、threadB がnb *threadAを作成し、 myobjの値がnbと等しくなるまで待機します。 myobjは最初は 0 に等しく、各 threadA はそれをインクリメントします。それがnbに等しくなると、最後の threadA が ThreadB に通知します。
プログラムを実行すると、threadB は通知されず、実行を継続しません。このコードのどこに問題があるのか、誰か教えてもらえますか?
public class Myclass {
static Long myobj = new Long(0);
static int nb = 1;
public static void main(String[] args) {
ThreadA[] threadA = new ThreadA[nb];
ThreadB threadB = new ThreadB(threadA);
}
}
public class ThreadA extends Thread {
public ThreadA() {
this.start();
}
public void run() {
// do lot of computation
Myclass.myobj = Myclass.myobj + 1;
if (Myclass.myobj.intValue() == Myclass.myobj.nb) {
synchronized (Myclass.myobj) {
Myclass.myobj.notify();
}
}
}
}
public class ThreadB extends Thread {
ThreadA[] threadA;
public ThreadB(ThreadA[] threadA) {
this.threadA = threadA;
this.start();
}
public void run() {
for (int i = 0; i < threadA.length; i++) {
threadA[i] = new ThreadA();
}
synchronized (Myclass.myobj) {
while (Myclass.myobj.intValue() != Myclass.myobj.nb) {
Myclass.myobj.wait();
}
}
}
}