Вывод
Ivanov делает шаг №1!
Ivanov делает шаг №2!
Petrov делает шаг №1!
Ivanov делает шаг №3!
Ivanov делает шаг №4!
Petrov делает шаг №2!
Ivanov делает шаг №5!
Ivanov делает шаг №6!
Petrov делает шаг №3!
Ivanov делает шаг №7!
Ivanov делает шаг №8!
Petrov делает шаг №4!
Ivanov делает шаг №9!
Иногда такой ответ получается, подскажите, как то это можно учесть?
код такой проверку прошел(кусок кода)
public static void main(String[] args) throws InterruptedException {
Runner ivanov = new Runner("Ivanov", 4);
Runner petrov = new Runner("Petrov", 2);
//на старт!
//внимание!
//марш!
ivanov.start();
petrov.start();
Thread.sleep(2000);
isStopped = true;
Thread.sleep(1000);
}
public static class Stopwatch extends Thread {
private Runner owner;
private int stepNumber;
public Stopwatch(Runner runner) {
this.owner = runner;
}
public void run() {
try {
while (!isStopped) {
doStep();
}
} catch (InterruptedException e) {
}
}
private void doStep() throws InterruptedException {
stepNumber++;
Thread.sleep(1000/owner.getSpeed());
System.out.println(owner.getName() + " делает шаг №" + stepNumber + "!");
}
Даниил
26 уровень
Подсобите
Решен
Комментарии (3)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Андрей
13 июня 2019, 19:20
Ну у тебя и будет всегда Иванов быстрее шагать потому что Thread.sleep(1000/owner.getSpeed());. А нити рандомно вызываются
0
IceBergMaster
13 июня 2019, 18:24решение
Не очень понимаю вопрос, ты хочешь узнать, можно ли точно узнать последовательность вывода? Тогда нет, нельзя. Хотя учитывая скорость всегда будет прослеживаться закономерность, что Иванов делает два шага, а Петров один.
+2
Даниил
13 июня 2019, 17:29
Обычно вывод такой Ivanov делает шаг №1!
Petrov делает шаг №1!
Ivanov делает шаг №2!
Ivanov делает шаг №3!
Petrov делает шаг №2!
Ivanov делает шаг №4!
Ivanov делает шаг №5!
Petrov делает шаг №3!
Ivanov делает шаг №6!
Ivanov делает шаг №7!
Petrov делает шаг №4!
Ivanov делает шаг №8!
0