Мне нужно прочитать данные из таблицы и выполнить некоторую работу над каждой строкой и пометить строку как обновленную. Я не хочу снова читать обновленную строку. Вот что я планирую делать с ExecutorService. Это верно ?Попытка реализовать рабочий поток
Спасибо.
public class ScheduledDBPoll
{
public static void main(String args[])
{
ExecutorService service = Executors.newFixedThreadPool(10);
/* Connect to database. */
while (true)
{
/* Issue a select statment for un-updated rows. */
/* Get the primary key. */
service.submit(new Task(primaryKey)); /* Pass the primary key*/
try
{
Thread.sleep(3000); /* Sleep for 3 seconds. */
}
catch (InterruptedException ex)
{
Logger.getLogger(ScheduledDBPoll.class.getName()).log(Level.SEVERE, null, ex);
}
}
/* Close the connection here. */
}
}
final class Task implements Runnable
{
private int taskId;
public Task(int primayKey)
{
this.taskId = primayKey;
}
@Override
public void run()
{
try
{
/* Connect to database. */
/* Select the passed primary key row. */
/* Do some work, mark the row as updated. */
/* Close the connection here. */
}
catch (InterruptedException ex)
{
Logger.getLogger(Task.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
Я использую базу данных Firebird, Firebird является только потокобезопасной на уровне соединения. Поэтому я стараюсь избегать двух запросов в разных потоках, работающих против одного и того же соединения. Я также забыл упомянуть, что вышеупомянутый фрагмент кода будет запущен как служба Windows, поэтому он всегда будет искать недавно вставленные записи.
запустить его и посмотреть. –
, когда я вижу 'while (true) {...}', тогда я знаю, что что-то не так – alex
Этот код не кажется полным .. Вы собираетесь запустить это навсегда? Нет условия для завершения 'while (true) {...}' .. и откуда инициализируется 'primaryKey'? – bram