У меня немного неприятная проблема. Прямо сейчас у меня есть фрагмент кода, который запускает поток, устанавливает таймер внутри этого потока, а затем выходит из этого потока и продолжает свою жизнь. Мое намерение состояло в том, чтобы программа дождалась завершения TimerTask, прежде чем продолжить поток кода. Однако, очевидно, что создание новой TimerTask не приостанавливает выполнение, чтобы дождаться, когда таймер будет работать.Java: дождитесь завершения TimerTask перед продолжением выполнения.
Как настроить это, чтобы мой код достигнет TimerTask, ждет истечения срока действия TimerTask, а затем продолжается? Должен ли я вообще использовать таймер? Я везде искал решение, но я, похоже, не нашел его.
timer = new Timer();
Thread t = new Thread(new Runnable(){
boolean isRunning = true;
public void run() {
int delay = 1000;
int period = 1000;
interval = 10;
timerPanel.setText(interval.toString());
//Scheduling the below TimerTask doesn't wait
//for the TimerTask to finish before continuing
timer.scheduleAtFixedRate(new TimerTask() {
public void run() {
timerPanel.setText(setInterval().toString());
}
}, delay, period);
System.out.println("Thread done.");
}
});
t.start();
try {
t.join(); //doesn't work as I wanted
} catch (InterruptedException e) {
e.printStackTrace();
}
endTask();
Заранее спасибо.
EDIT: Извините за путаницу в повторяющейся задаче. Мне нужно, чтобы задача повторялась, потому что это таймер обратного отсчета, который каждую секунду отбрасывает от 10 до 0. Функция setInterval() в конечном итоге отменяет таймер. Вот соответствующий код:
private final Integer setInterval() {
if (interval == 1)
timer.cancel();
return --interval;
}
Вы пробовали [Thread.sleep] (http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html#sleep (длинный))? –
Вы запланировали повторную задачу, она никогда не завершится. –
Если у вас есть это запланировано - оно будет повторяться. Если вам не нужно повторять его и нужно подождать, пока он не закончится, вам это не понадобится. просто создайте метод и назовите его – Tala