У меня есть особая функция, которую я хочу выполнить через 5 секунд. Как я могу сделать это на Java?
Я нашел javax.swing.timer, но я не могу понять, как его использовать. Похоже, я ищу что-то более простое, чем этот класс.
Пожалуйста, добавьте простой пример использования.
Ответы:
РЕДАКТИРОВАТЬ:
Джавадок говорит:
источник
import java.util.Timer; import java.util.TimerTask;
может сделать это более очевидным, что это не такjavax.swing.Timer
. / Обратите внимание: если вы используете Swing (и фактически AWT), вам не нужно ничего делать для изменения компонентов в потоках не-Event Dispatch Thread (EDT) (java.util.Timer
задачи плохие;javax.swing.Timer
хорошие действия).cancel
метода таймера в конце метода run очистит поток выполнения TimerTasks.Что-то вроде этого:
Существуют различные другие фабричные методы,
Executor
которые вы можете использовать вместо этого, если вам нужно больше потоков в пуле.И помните, важно завершить работу исполнителя, когда вы закончите.
shutdown()
Метод будет чисто закрыть пул потоков , когда последняя задача завершена, и будет блокироваться , пока это не произойдет.shutdownNow()
немедленно прекратит пул потоков.источник
Пример использования
javax.swing.Timer
Этот код будет выполнен только один раз, а выполнение происходит за 3000 мс (3 секунды).
Как упоминает camickr, вам следует поискать « Как использовать Swing Timers » для краткого введения.
источник
Мой код выглядит следующим образом:
источник
Как вариант ответа @tangens: если вы не можете дождаться, когда сборщик мусора очистит ваш поток, отмените таймер в конце вашего метода run.
источник
Timer t
быть объявлен,final
так как к нему обращаются внутри внутреннего класса?Ваш оригинальный вопрос упоминает «Таймер качания». Если на самом деле ваш вопрос связан с SWing, то вам следует использовать Swing Timer, а НЕ util.Timer.
Прочтите раздел из руководства по Swing « Как использовать таймеры » для получения дополнительной информации.
источник
Вы можете использовать функцию Thread.Sleep ()
Ваша функция будет выполнена через 4 секунды. Однако это может приостановить всю программу ...
источник
ScheduledThreadPoolExecutor
имеет эту способность, но она довольно тяжелая.Timer
также имеет эту способность, но открывает несколько потоков, даже если используется только один раз.Вот простая реализация с тестом (подпись близка к Android Handler.postDelayed () ):
Тест:
источник
while
Просто игнорировать прерывание.Все остальные ответы требуют запуска вашего кода в новом потоке. В некоторых простых случаях вы можете просто немного подождать и продолжить выполнение в том же потоке / потоке.
Код ниже демонстрирует эту технику. Имейте в виду, что это похоже на то, что java.util.Timer делает под капотом, но более легкий.
Реализация DelayUtil
источник
источник