2015-10-22 3 views
1

Итак, однажды я задаюсь вопросом, могу ли я сделать простую программу, которая ждет несколько секунд, прежде чем инициализировать остальную часть программного кода. Моя первая идея в то время - использовать функцию Calendar, как это;Использование функции календаря для замены функции ожидания/ожидания в Java

import java.util.Calendar; 

public class NewMain { 

static int count = 0 ; 
static int time = 0 ; 

public static void main(String[] args) { 

    Calendar cal = Calendar.getInstance(); 

    time = cal.get(Calendar.MINUTE); 
    count = time +1; 
    System.out.println(time); 
    System.out.println(count); 

    while (time < count){ 
     time = cal.get(Calendar.MINUTE); 
    } 

    System.out.println("Done"); 

} 

Идея заключается в том, когда значение time становится больше, чем count, остальная часть программы будет выполнена. Однако, когда я пробовал этот код, программа продолжает двигаться даже после того, как значение time больше count.

Я знаю, что это плохой код, потому что это пустая трата ресурсов, и есть функция sleep или wait, которая работает так, но мне любопытно, почему это происходит.

ответ

1

Ваш Calendar объект представляет собой фиксированный момент времени. Его поля не обновляются каждый раз, когда изменяется время, поэтому повторные вызовы на cal.get(Calendar.MINUTE) всегда будут возвращать одинаковое значение. Из-за этого time < count является всегдаtrue. Вам нужно, чтобы получить новый Calendar экземпляру каждой итерации, чтобы сделать эту работу:

while (Calendar.getInstance().get(Calendar.MINUTE) < count) { ... } 

который не является прекрасной идеей точки зрения производительности.

+0

А, я вижу. Поэтому мне нужно сделать еще один объект календаря внутри цикла, чтобы он работал. Это действительно не лучший способ сделать программу. Хорошо, спасибо за ответ. –

Смежные вопросы