Как вызвать метод в определенное время в java?

Можно ли вызвать метод в java в определенное время? Например, у меня есть такой код:

class Test{ .... // parameters .... public static void main(String args[]) { // here i want to call foo at : 2012-07-06 13:05:45 for instance foo(); } } 

Как это можно сделать в java?

Используя class java.util.Timer, вы можете создать таймер и запланировать его запуск в определенное время.

Ниже приведен пример:

 //The task which you want to execute private static class MyTimeTask extends TimerTask { public void run() { //write your code here } } public static void main(String[] args) { //the Date and time at which you want to execute DateFormat dateFormatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date date = dateFormatter .parse("2012-07-06 13:05:45"); //Now create the time and schedule it Timer timer = new Timer(); //Use this if you want to execute it once timer.schedule(new MyTimeTask(), date); //Use this if you want to execute it repeatedly //int period = 10000;//10secs //timer.schedule(new MyTimeTask(), date, period ); } 

Это возможно, и я бы использовал библиотеку, такую ​​как http://quartz-scheduler.org/

Quartz – полнофункциональная служба планирования заданий с открытым исходным кодом, которая может быть интегрирована или использоваться практически практически любым приложением Java EE или Java SE – от самого маленького автономного приложения до самой крупной системы электронной коммерции. Кварц можно использовать для создания простых или сложных графиков для выполнения десятков, сотен или даже десятков тысяч рабочих мест; задания, задачи которых определяются как стандартные компоненты Java, которые могут выполнять практически все, что вы можете запрограммировать для них.

Вы можете использовать ScheduledExecutorService , который является «более универсальной заменой комбинации Timer / TimerTask » (согласно javadoc Timer ):

 long delay = ChronoUnit.MILLIS.between(LocalTime.now(), LocalTime.of(13, 5, 45)); ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); scheduler.schedule(task, delay, TimeUnit.MILLISECONDS); 

Вы можете использовать class Timer

Из документации:

Средство для streamов для планирования задач для будущего выполнения в фоновом streamе. Задачи могут быть запланированы для однократного выполнения или для повторного выполнения с регулярными интервалами.

schedule(TimerTask task, Date time) метода schedule(TimerTask task, Date time) – это именно то, что вы хотите: расписание указанной задачи для выполнения в указанное время.

Если вам нужен график в формате cron , кварц будет хорошим решением. ( график, подобный кварцевому cron )

Если вы говорите о SE, то class Timer может быть тем, что вы ищете http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Timer.html , доступным с Java 5.

Если вам нужно что-то время в контексте сервера приложений, я бы порекомендовал взглянуть на таймеры EJB http://www.javabeat.net/2007/03/ejb-3-0-timer-services-an-overview/, доступные с тех пор EJB 3.0.

В качестве альтернативы, в зависимости от того, что вы действительно пытаетесь сделать, вы могли бы разработать, если использование задания cron (или любого другого метода таймера на основе ОС) было бы более подходящим, т. Е. Вы не хотите или не можете заставить VM работать со всеми время.

Насколько я знаю, для этого можно использовать Quartz-scheduler . Я еще не использовал его, но многие люди рекомендовали его мне.

Возможно. Вы можете запланировать метод в определенное время с помощью Timer и TimerTask .

Например:

 Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.HOUR_OF_DAY, 10); calendar.set(Calendar.MINUTE, 30); calendar.set(Calendar.SECOND, 0); Date alarmTime = calendar.getTime(); Timer _timer = new Timer(); _timer.schedule(foo, alarmTime); 

См. Следующие ссылки:

  • таймер
  • TimerTask

Простая демонстрация java.util.Timer

 Timer t=new Timer(); t.schedule(new TimerTask() { public void run() { foo(); } }, new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse("2012-07-06 13:40:20")); 
  • Writer или OutputStream?
  • Управление конструкторами со многими параметрами в Java
  • Не удалось открыть Android 6.0: EACCES (Permission denied)
  • Android Как нарисовать гладкую линию после пальца
  • Изменение языка ввода клавиатуры Programmatically
  • Android FragmentManager BackStackRecord.run бросает NullPointerException
  • Сортировка ArrayList на основе поля объекта
  • Android: навигационная панель для всех видов деятельности
  • Почему объект Object.toString () по умолчанию содержит hash-код?
  • Точка входа для приложений Java: main (), init () или run ()?
  • Исходный ресурс Android не найден?
  • Давайте будем гением компьютера.