1

В моем приложении я выполняю кучу SQL-запросов, таких как задание и детали выполнения, которые вставляются в таблицу. Как только какая-либо запись будет вставлена, слушатель должен забрать ее и начать контролировать состояние выполнения и обновить статус в той же таблице.Должен ли я использовать ExecutorService?

Мой front-end готов и до сих пор я могу выполнить задание (несколько запросов) и вставить детали в таблицу. Теперь я хочу зафиксировать статус выполнения, а также я должен иметь возможность завершить, приостановить, перезапустить выполнение.

Пока я просматриваю многопоточную часть, я наткнулся на ExecutorService.

Мой вопрос: должен ли я это делать с помощью ExecutorService? или есть другой способ?

Просьба поделиться любыми ссылками на учебники.

ответ

1

В вашем случае, я думаю, вы можете использовать ExecutorService и создавать задания в Callable объектах, которые помогут вам получить статус вашей работы, это форма Future objects.

Для обучения я бы предпочел this, он имеет базовую информацию о параллельном пакете.

0

Я использовал ExecutorService для проведения параллельных модульных тестов. И нашел это очень успешным. Поэтому я предлагаю вам использовать его. См. this

0

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

how-to-get-to-futuretask-execution-state

Хотя структура Исполнителей является довольно мощной и может быть использована практически в любом случае, возможно, вам следует взглянуть на параллелизме библиотеках как Quartz, которая будет иметь много проблем, которые собираются столкнуться, если с использованием исполнителей, уже разрешенных.

0

Да. Вы можете ExecuteService, Callable и Future для этого.

Пример кода:

import java.util.concurrent.*; 
import java.util.*; 
import java.util.Random; 

public class CallableDemo{ 
    public CallableDemo(){ 
     System.out.println("creating service"); 
     ExecutorService service = Executors.newFixedThreadPool(10); 

     System.out.println("Start"); 
     List<MyCallable> futureList = new ArrayList<MyCallable>(); 
     for (int i=0; i<10; i++){ 
      MyCallable myCallable = new MyCallable(); 
      Future future = service.submit(myCallable); 
      try{ 
       System.out.println("future.isDone = " + future.isDone()); 
       /* You can use future.get() blocking call set time out*/ 
       System.out.println("future: call ="+future.get()); 
      } 
      catch (CancellationException ce) { 
       ce.printStackTrace(); 
      } catch (ExecutionException ee) { 
       ee.printStackTrace(); 
      } catch (InterruptedException ie) { 
       Thread.currentThread().interrupt(); // ignore/reset 
      } 
     }  
     service.shutdown(); 
    } 
    public static void main(String args[]){ 
     CallableDemo demo = new CallableDemo(); 
    } 
    class MyCallable implements Callable<Long>{ 
     Long result = 0L; 

     public MyCallable(){ 

     } 
     public Long call(){ 
      // Add your business logic 
      // set the result 
      return result; 
     } 
    } 
} 

Основные ноты:

  1. future.get() возвращает после вычисления ГОО задачи. Либо вы можете заблокировать до завершения Callable, либо установить для него время ожидания.
  2. Если вы получили InterruptedException, прервите текущий поток и продолжите.
  3. Не забывайте звонить по телефону shutdown()
Смежные вопросы