2009-07-31 5 views
1

HIКак запустить метод в XX: XX: XX раз?

Я хочу запустить метод в моей программе evry X hours, как это сделать? Im и прибегая к помощи нет ничего:/

+3

звучит как работа на Cron. – Tom

+0

На каком языке вы хотите сделать это? – jtbradle

+2

Будет ли программа работать непрерывно или ее нужно запустить? –

ответ

6

Вы могли бы взглянуть на 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); 
    } 
} 
+0

Это хорошие варианты для процесса, который работает непрерывно, и включает в себя некоторые заранее определенные задачи. Для «долговечных» задач (заданий, которые необходимо запланировать динамически и которые необходимо сохранить в случае сбоя приложения), ознакомьтесь с Quartz Scheduler (http://www.opensymphony.com/quartz) – erickson

+0

только незначительным nitpick ... если я правильно читаю этот код, на самом деле он не «звучит», как вы описываете, а вместо этого печатает строку «beep». IIRC, если вы вместо этого напечатали строку «\ a», это действительно произвело бы звуковой сигнал. – rmeador

+0

@rmeador - только если это консольное приложение, в противном случае вам нужно сделать что-то вроде java.awt.Toolkit.getDefaultToolkit(). Beep() – mpontillo

0

Scheduled TaskWindows) или CronUnix)

+1

Исходя из требований, задача cron или schedule не будет работать. Требование состоит в том, чтобы запустить определенную функцию в приложении, а не запускать приложение. AFAIK, cron и запланированное задание могут запускать только сценарии и приложения и не контролировать поток конкретного приложения. –

0

Вы можете сэкономить время, в определенный момент, чем запустить таймер. Когда время закончится, вы запустите метод и перезапустите таймер.

9

Вы можете рассмотреть Quartz.

Это какой-то cron, который работает внутри java. Я признаю, что это, вероятно, перебор, если вы хотите запланировать только одно задание.

+0

Чтение между строками, я бы догадался, что Кварц переборщил и, вероятно, слишком сложно использовать в этом случае. Фактически, несмотря на технические недостатки, java.util.Timer скорее всего будет лучше, чем ExecutorService. – erickson

2

Я использую каркас кварца для большей части моего планирования (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(); 
    } 
} 
Смежные вопросы