尋找一些幫助與大學作業,真的堅持這一個,會感謝一些幫助...是同步嗎?Java對象監視器
考慮如下所示的代碼:
public class Q3 {
public static void main(String args[]) {
new Q3(Integer.parseInt(args[0]));
}
public Q3(int keyholdersRequired) {
SecretChest secretChest = new SecretChest(keyholdersRequired);
for(int i = 0; i < keyholdersRequired; i++) {
new KeyHolder(secretChest).start();
try {
Thread.sleep((int)(Math.random() * 5000));
} catch (InterruptedException ie) {}
}
}
}
class KeyHolder extends Thread {
private SecretChest secretChest;
public KeyHolder(SecretChest secretChest) {
this.secretChest = secretChest;
System.out.println("New Keyholder Arrived...");
}
public void run() {
if(secretChest.unlock() == true)
System.out.println("Secret chest unlocked");
}
}
class SecretChest {
private int keysStillRequired;
public SecretChest(int keysRequired) {
keysStillRequired = keysRequired;
}
public boolean unlock() {
keysStillRequired--;
return true;
}
}
在這個程序中,新KeyHolder
線程間歇啓動。然後,每個KeyHolder都會調用SecretChest
上的解鎖方法, 已被給予參考。解鎖方法應在打開時返回 SecretChest
。 SecretChest
不應該打開,直到 所需的線程號碼KeyHolder
稱爲解鎖方法。 所需的KeyHolders數量作爲命令行 參數傳遞給程序。
既然這樣,從該程序的輸出,對於3個KeyHolders是:
java Q3 3
New Keyholder Arrived...
Secret chest unlocked
New Keyholder Arrived...
Secret chest unlocked
New Keyholder Arrived...
Secret chest unlocked
所需的輸出是:
java Q3 3
New Keyholder Arrived...
New Keyholder Arrived...
New Keyholder Arrived...
Secret chest unlocked
Secret chest unlocked
Secret chest unlocked
使用Java的對象監視器,使向SecretChest必要的修改 上面的類來產生所需的行爲。
我得到這個使用
class SecretChest {
private int keysStillRequired;
public SecretChest(int keysRequired) {
keysStillRequired = keysRequired;
}
public boolean unlock() {
keysStillRequired--;
if(keysStillRequired == 0) {
return true;
}
return false;
}
但我不認爲這是什麼被要求,這個問題要求使用Java類對象監視器...有另一種方式來做這項工作呢?我綁定使用syncronise和通知,但我不知道如何使用它們。
欣賞的幫助。
感謝,但你能解釋一下嗎? – user3626100
Volodia做你的硬件已經很糟糕。現在你想讓他向你解釋一下嗎?如果你儘自己的本分並且至少嘗試通過它進行調試,那麼該如何? –
道歉,我確實得到了這個工作(我應該包括代碼)與下面的代碼,但我不認爲這就是問題的要求...我需要使用對象監視器,那就是我掙扎。 keysStillRequired--; \t \t synchronized(this){ if(keysStillRequired == 0)\t { return true; } return false; – user3626100