In meiner Aufgabe habe ich versucht, sicherzustellen, dass jeweils nur ein Thread ausgeführt wird, aber die Zuweisung erfordert, dass ich wait() und notify() verwende. Anrufe. In meinem Code habe ich Array von Threads (3 davon) erstellt, und ich starte sie alle in einer Schleife. In der Schleife habe ich versucht, andere Threads warten zu lassen, während ein Thread läuft, nachdem der Thread abgeschlossen ist, dann benachrichtige er andere Threads. aus irgendeinem Grund, mein Code hat nicht funktioniert, darf ich fragen, was ist falsch in meinem Code? So verwenden Sie wait() und notify()
//make array of reservation thread
Thread[] reserve = new Thread[3];
for(int i=0; i< reserve.length; i++){
reserve[i] = new Thread(new Reservation(2016, monthArray[i], dayArray[i], hourArray[i]));
}
for(int i=0; i< reserve.length; i++){
//start first thread
reserve[i].start();
//if the thread is running, all other thread should be waiting
while(reserve[i].isAlive()){
for(int j=i+1; j<= reserve.length; j++){
try {
synchronized(reserve[j]){
reserve[j].wait();
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
//after the previous thread completed, resume other threads
reserve[i].notifyAll();
}
Inhalt der Reservierung
public class Reservation implements Runnable{
public int time;
public int day;
public int month;
public int year;
public Reservation (int t, int d, int m, int y){
time= t;
day= d;
month=m;
year= y;
}
public void run(){
try{
System.out.println("you made reservation at "+day +"/" +month+ "/"+ year +" " + time);
}
catch(Exception e){
}
}
public void display(String a){
System.out.println(a);
}
}
zeigen Sie uns den Inhalt der Reservierung –
Haben Sie das [grundlegende Tutorial auf der Java-Website von Oracle] (https://docs.oracle.com/javase/tutorial/essential/concurrency/guardmeth.html)? –
danke für den Kommentar. Ich habe den Inhalt der Reservierung hinzugefügt. Ich habe einige YouTube-Videos angeschaut, wie man wait() benutzt und benachrichtigt, aber sie sind alle im Objekt implementiert. Darf ich den Unterschied zwischen Schlössern und synchronisiert fragen? – Kuge4399