Ich möchte meine gerade ungerade Zahl in der Reihenfolge 1 2 3 4 5 6 drucken. Ich denke zuerst Anruf in Odd-Thread benachrichtigen sollte die even-Thread wait() zum Drucken der nächsten geraden Zahl entsperren, aber es ist nicht der Fall. Es wird nur "1" gedrucktWarum notify() funktioniert nicht in der unteren Code?
class T1 extends Thread {
private String[] s1;
private boolean flag;
public T1(String[] args, boolean flag) {
this.flag = flag;
this.s1 = args;
}
public synchronized void run() {
for (int i = 0; i < s1.length; i++) {
if(flag)
{
try {
wait();
} catch (InterruptedException e) {
System.out.println("exception");
}
}
System.out.println(s1[i]);
notify();
flag = true;
}
}
}
public class TestThread {
public static void main(String[] args) {
String[] s1 = { "1", "3", "5" };
String[] s2 = { "2", "4", "6" };
Runnable odd = new T1(s1,false);
Runnable even = new T1(s2,true);
new Thread(even,"even-thread ").start();
new Thread(odd,"odd-thread ").start();
}
}
Sie haben zwei 'Thread' Objekte, sie signalisieren einander nicht, sie sind sich selbst signalisieren. Verwenden Sie ein gemeinsames Objekt. Nie 'notify' oder' wait' auf 'Thread'-Instanzen. –
Willkommen bei StackOverflow. Bitte besuchen Sie die [Hilfe] und lesen Sie [fragen]. Haben Sie Ihren Code in Ihrem IDE-Debugger durchgegangen? Das ist der Ort, um anzufangen. –