在我的Java代碼threadB創建NB *的ThreadA和等待,直到MyObj中價值將等於NB。 myobj最初等於0,並且每個線程A增加它,當它變得等於nb最後一個線程A通知ThreadB。爪哇 - obj.notify()似乎並沒有工作
運行程序時,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();
}
}
}
}
好的。當你創建ThreadB時,你給它一個具有certian大小的空數組,對嗎? – romedius
是的。這是錯的嗎? – user1027336