2013-06-22 6 views
1

У меня есть ситуация, когда мне нужно запустить Java-код, чтобы определить определенный статус базы данных (только несколько конкретных счетчиков) за каждые 1 с. Я планировал создать бесконечный цикл, который должен срабатывать только тогда, когда база данных не работает (останавливается административно или случайно). Может ли кто-нибудь показать мне примерный способ записи бесконечного цикла, который не навредит работающей базе данных? Или, даже если есть лучший способ приблизиться к этой цели, чтобы периодически собирать данные?Запись бесконечного цикла в Java

+4

Используйте 'ScheduledExecutorService'. – fge

+0

Используйте либо java.util.Timer, либо что @fge рекомендует. –

+0

Я думаю, вы пытаетесь задать хороший вопрос, но это требует улучшения. Покажите какой-нибудь код, покажите, что вы попробовали, и почему он не работает или что вы думаете, может быть не так. – djechlin

ответ

2

Использование 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); 

    } 

    public static void main(String[] args) { 
    BeeperControl bc=new BeeperControl(); 
    bc.beepForAnHour(); 
    } 
} 
+0

Ah и не забывать '@ Override'' run() 'в' Runnable' – fge

+0

Это демонстрационный пример. Он подает звуковой сигнал через 10 секунд, и через 1 час расписание будет отменено. Вы должны указать желаемое значение. – Masudul