在我的任務中,我試圖確保一次只運行一個線程,但該任務需要我使用wait()和notify()調用。 在我的代碼中,我創建了一個線程數組(其中3個),並且我在一個循環中啓動它們。在循環中,我試圖讓其他線程等待一個線程正在運行,線程完成後,然後通知其他線程。 由於某種原因,我的代碼無法正常工作,請問我的代碼中出現了什麼問題?如何正確使用wait()和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();
}
預約
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);
}
}
向我們展示預訂內容 –
您是否已經完成了[Oracle Java網站上的基礎教程](https://docs.oracle.com/javase/tutorial/essential/concurrency/guardmeth.html)? –
感謝您的評論。我添加了預訂的內容。我觀看了幾個關於如何使用wait()和notify的youtube視頻,但它們都是在對象中實現的。我可以問一下鎖之間的區別和同步嗎? – Kuge4399