У меня есть поток, который работает в фоновом режиме моей программы и обнаруживает, когда наступает крайний срок (установленный пользователем в начале программы). Я реализовал это в цикле while
и использовал метод sleep(1000)
.Java - использовать метод wait() до определенного времени
Это все работает нормально, но я хотел бы изменить его на от использования sleep(1000)
с использованием wait()
и notifyAll()
, чтобы соответствовать остальной части моего кода, и сделать предупреждение происходит в режиме реального времени, а не отставать от часть секунды, пока нить не повторится.
Вот что я в настоящее время
//Retrieve current date and time...
Calendar now = Calendar.getInstance();
//deadline not yet reached
while(now.before(deadline))
{
try
{
//wait a second and try again
sleep(1000);
}
catch (InterruptedException intEx)
{
//Do nothing.
}
//Update current date and time...
now = Calendar.getInstance();
//run loop again
}
////////////////////////////
///alert user of deadline///
////////////////////////////
Я попытался изменить его на использование wait()
, но успеха не имел. Может ли кто-нибудь увидеть способ изменения существующего кода для реализации упомянутых мной методов?
Спасибо заранее, Марк
Где вы хотите позвонить? Почему бы вам просто не спать количество секунд, которое вам нужно, а не какие-то 1000? – matt
notifyAll() не вызывается в настоящий момент, так как пока нет вызова wait(). В настоящий момент он проверяет каждую секунду, потому что крайний срок вводится на одну минуту, и я только что запускал его с проверкой каждую секунду. Я бы хотел использовать wait(), чтобы сделать его более точным @matt – marcuthh
Я не понимаю, как ожидание сделает его более точным. Вероятно, вы должны использовать сон, который вам нужен, а не на 1 секунду. Таким образом, если бы вы были на пару миллисекунд на чеке, вы бы не подождали целую секунду, только пару миллисекунд. Если вы хотите сделать это правильно, используйте ScheduledExecutorService. – matt