2013-12-24 3 views
0

Я создаю приложение, которое подключается к маршрутизатору, получает некоторые данные и вставляет полученные данные в базу данных.Выполнение процедуры обслуживания прерывания в Java

Мне нужно получить эти данные с маршрутизатора каждые 30 секунд. И вернитесь, чтобы обновить базу данных новыми данными.

Я не знаю, как реализовать этот механизм таймера (он похож на механизм рутинной процедуры прерывания).

Я новичок в Java, Any Help? Должен ли я использовать поток? Я коротко читаю о потоках, но не знаю точно, как они работают.

EDIT: Обратите внимание, что в основном у меня есть другая вещь. Главное выполняет несколько функций. однако каждые 30 секунд я хочу выполнить одну дополнительную функцию.

+0

'ScheduledExecutorService'. –

ответ

1

Более чистый способ заключается в планировании периодической задачи.

Вы можете использовать различные интерфейсы:

  • ScheduledExecutorService.scheduleAtFixedRate (...)
  • Timer.scheduleAtFixedRate (..)

Оба будут выполнять код через определенные промежутки времени.

+0

Спасибо за беспокойство, но я пытался на некоторое время, и я запутался. ScheduledExecutorService.scheduleAtFixedRate принимает первый параметр как Runnable. while Timer.scheduleAtFixedRate первый параметр может быть вызван, Что это? я проверил документы, и я не мог понять, мне нужно создать новый класс и передать его там? –

+0

Runnable/Callable должны быть реализованы классами (могут быть анонимными), содержащими код, необходимый для извлечения данных и обновления базы данных. то есть весь код, который должен выполняться периодически. – Guillaume

2

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

ScheduleExecutorService ses = Executors.newSingleThreadScheduledExecutor(); 
ses.scheduleAtFixedRate(new Runnable() { 
    public void run() { 
     Data data = getDataFromRouter(); 
     updateDatabase(data); 
    } 
}, 0, 30, TimeUnit.SECONDS); 

Другим мудрым я бы простой цикл, как это.

while(true) { 
    Data data = getDataFromRouter(); 
    updateDatabase(data); 
    Thread.sleep(30 * 1000); 
} 

Вам нужна хотя бы одна нить, но вы начинаете с нее.

+0

У меня есть другая вещь, чтобы сделать в основном, я не хочу спать. Вот почему я называю это прерыванием обслуживания. Главное выполняет несколько функций. однако каждые 30 секунд я хочу выполнить одну дополнительную функцию. –

+0

@ShadyAhmed Вы этого не говорили. Можете ли вы добавить эти детали к вопросу? –

+1

Я не могу найти функцию newScheduledExecutorService Я могу найти: newScheduledThreadPool вместо этого! –

Смежные вопросы