Часть приложения, которое я пишу, использует систему хронометров. Таймер должен указывать один раз каждые миллисекунды.Задача таймера Java работает медленнее, чем обычно.
В моем хронометре у меня есть эти переменные.
private static final int DELAY_IN_MILLISECONDS = 0;
private int intervalInMilliseconds = 1;
Я запустить таймер, как это:
timer = new Timer();
timer.schedule(new Task(), DELAY_IN_MILLISECONDS,
getIntervalInMilliseconds());
Тем не менее, через секунду он достиг только около + - 100ms вместо того, чтобы 1000ms.
Хотя он работал нормально, пока я не добавил код в другую часть игры. Я уверен, что ничего не изменил по таймеру, но он стал медленнее, чем обычно (сначала он работал нормально).
Возможно ли, что мой таймер работает медленнее из-за применения, требующих слишком много процессорного времени для других вещей? (это игра, которую я создаю). Если да, то каким будет обычный способ решить эту проблему? Имея в виду, что игра важнее, чем таймер.
Заранее благодарен!
EDIT: Есть ли способ, чтобы выяснить, какая часть вашего приложения «узкие места» его, например, чек, где он использует большую часть ресурсов и т.д.?
Вы _cannot_ отметьте каждый мс. 'Timer' использует' sleep' для ожидания - 'sleep' имеет разрешение около 15 мс в лучшем случае. Без ожидания и использования 'System.nanoTime()' вы не можете иметь более высокое разрешение, чем около 15 мс. –
@BoristheSpider в порядке, что я смог проверить благодарность. Тем не менее, это было намного быстрее. Но тогда я предполагаю, что вся проблема заключается в пробуждении, которое на самом деле медленнее 15 мс. Я должен, вероятно, посмотреть на несколько потоков. EDIT: Кроме того, даже с этим 15мс, он должен принять его меньше, чем 10сек он использует теперь, я надеюсь, что:/ –
Я не теперь внутренности 'Timer', но я думаю, что если бежит' Task' дольше, чем 1 мс, чем это задержит последующие «Задачи». – Katona