HIКак запустить метод в XX: XX: XX раз?
Я хочу запустить метод в моей программе evry X hours, как это сделать? Im и прибегая к помощи нет ничего:/
HIКак запустить метод в XX: XX: XX раз?
Я хочу запустить метод в моей программе evry X hours, как это сделать? Im и прибегая к помощи нет ничего:/
Вы могли бы взглянуть на Timer класса, но лучшим вариантом является использование ScheduledExecutorService:
например Это будет издавать звуковой сигнал при запланированной скорости:
import static java.util.concurrent.TimeUnit.*;
class BeeperControl {
private final ScheduledExecutorService scheduler =
Executors.newScheduledThreadPool(1);
public void beepForAnHour() {
final Runnable beeper = new Runnable() {
public void run() {
System.out.println("beep");
}
};
final ScheduledFuture<?> beeperHandle =
scheduler.scheduleAtFixedRate(beeper, 10, 10, SECONDS);
scheduler.schedule(new Runnable() {
public void run() {
beeperHandle.cancel(true);
}
}, 60 * 60, SECONDS);
}
}
Это хорошие варианты для процесса, который работает непрерывно, и включает в себя некоторые заранее определенные задачи. Для «долговечных» задач (заданий, которые необходимо запланировать динамически и которые необходимо сохранить в случае сбоя приложения), ознакомьтесь с Quartz Scheduler (http://www.opensymphony.com/quartz) – erickson
только незначительным nitpick ... если я правильно читаю этот код, на самом деле он не «звучит», как вы описываете, а вместо этого печатает строку «beep». IIRC, если вы вместо этого напечатали строку «\ a», это действительно произвело бы звуковой сигнал. – rmeador
@rmeador - только если это консольное приложение, в противном случае вам нужно сделать что-то вроде java.awt.Toolkit.getDefaultToolkit(). Beep() – mpontillo
Scheduled Task (в Windows) или Cron (в Unix)
Исходя из требований, задача cron или schedule не будет работать. Требование состоит в том, чтобы запустить определенную функцию в приложении, а не запускать приложение. AFAIK, cron и запланированное задание могут запускать только сценарии и приложения и не контролировать поток конкретного приложения. –
Вы можете сэкономить время, в определенный момент, чем запустить таймер. Когда время закончится, вы запустите метод и перезапустите таймер.
Вы можете рассмотреть Quartz.
Это какой-то cron, который работает внутри java. Я признаю, что это, вероятно, перебор, если вы хотите запланировать только одно задание.
Чтение между строками, я бы догадался, что Кварц переборщил и, вероятно, слишком сложно использовать в этом случае. Фактически, несмотря на технические недостатки, java.util.Timer скорее всего будет лучше, чем ExecutorService. – erickson
Я использую каркас кварца для большей части моего планирования (http://www.quartz-scheduler.org/), но если вы делаете что-то простое, java.util.Timer в порядке.
// in a class body...
public static void main(String[] argv) {
Timer timer = new Timer();
int secondsBetweenRuns = 3600;
timer.schedule(new MyOwnTask(), 0, secondsBetweenRuns * 1000);
}
static class MyOwnTask extends TimerTask {
public void run() {
doWhateverYouNeedToDoEveryHour();
}
}
звучит как работа на Cron. – Tom
На каком языке вы хотите сделать это? – jtbradle
Будет ли программа работать непрерывно или ее нужно запустить? –