package com.javarush.task.task16.task1613;
/*
Big Ben clock
*/
public class Solution {
public static volatile boolean isStopped = false;
public static void main(String[] args) throws InterruptedException {
Clock clock = new Clock("Лондон", 23, 59, 57);
Thread.sleep(4000);
isStopped = true;
Thread.sleep(1000);
}
public static class Clock extends Thread {
private String cityName;
private int hours;
private int minutes;
private int seconds;
public Clock(String cityName, int hours, int minutes, int seconds) {
this.cityName = cityName;
this.hours = hours;
this.minutes = minutes;
this.seconds = seconds;
start();
}
public void run() {
try {
while (!isStopped) {
printTime();
}
} catch (InterruptedException e) {
}
}
private void printTime() throws InterruptedException {
while (hours < 24) {
while (minutes < 60) {
while (seconds < 60) {
Thread.sleep(1000);
if (hours == 0 && minutes == 0 && seconds == 0) {
System.out.println(String.format("В г. %s сейчас полночь!", cityName));
} else {
System.out.println(String.format("В г. %s сейчас %d:%d:%d!", cityName, hours, minutes, seconds));
}
seconds++;
}
seconds = 0;
minutes++;
}
minutes = 0;
hours++;
}
hours = 0;
}
}
}
Вопрос - почему не срабатывает sleep в мэйне?
Часы просто продолжают идти бесконечно.
Gleb Vasiliev
22 уровень
Задачу решил, но остался вопрос
Решен
Комментарии (3)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Ksenia VolkovaJava Developer в DXCMaster
22 декабря 2019, 06:44решение
У тебя же в printTime бесконечный цикл - вот часы и идут.
В методе run ты в цикле запускаешь printTime(), пока isStopped false. Но уже запущенные printTime так и будут работать бесконечно.
+2
Gleb Vasiliev
22 декабря 2019, 20:27
Я думал, что в любом случае таймер в мэйне будет работать параллельно. Не очень понятно как работает честно говоря
0
Ksenia VolkovaJava Developer в DXCMaster
22 декабря 2019, 20:48
Таймер в мейне и работает параллельно. Но как он может повлиять на работу printTime?
Там у тебя бесконечный цикл, и будучи однажды запущенным, он так и будет работать.
0