Ищете помощь в задании колледжа, действительно застряли в этом, были бы признательны за помощь ... это синхронизация?Объектные мониторы 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
. Требуемое количество требуемых ключей необходимо указать в командной строке .
Как можно заметить, выход из программы, 3 Брелки является:
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;
}
Но я не думаю, что это, Что спрашивают о, вопрос просит использовать Javas Object Мониторы ... есть другой способ сделать это? Я связал, используя syncronise и уведомляю, но я не уверен, как их использовать.
Оцените справку.
спасибо, но не могли бы вы объяснить? – user3626100
Уже плохо, что Володя сделал ваш HW. Теперь вы хотите, чтобы он объяснил это вам? Как насчет того, если вы сделаете свою часть и, по крайней мере, попытаетесь отладить ее? –
Извиняюсь, я получил эту работу самостоятельно (я должен был включить код) с кодом ниже, но я не думаю, что то, что задает вопрос ... Мне нужно использовать объектные мониторы, и вот где я боюсь. keysStillRequired--; \t \t синхронизированный (это) { if (keysStillRequired == 0) \t { return true; } return false; – user3626100