Приостановить ExecutorService в Java - PullRequest
0 голосов
/ 01 ноября 2018

У меня есть много данных для обработки и вставки в список, затем мне нужно вставлять этот список в мою БД каждый раз, когда в ней есть 100 тыс. Строк. Как я могу приостановить ExecutorService при сохранении списка в БД? Могу ли я заблокировать это?

пример кода с моей проблемой:

ExecutorService executor = Executors.newFixedThreadPool(threadAmount);
List <String> list = new ArrayList<>();
for(Object obj: ObjectList){
  objectThreadProcess dto = new ObjectThreadProcess(obj.toString(), obj.id);
  executor.submit(dto);
  executor.execute(dto);
  if(list.size() == 100000){
    //I need to pause threads here to not insert while I'm inserting into DB and creating a new list
    ObjDAO.largeInsert(list);
    list = new ArrayList<>();
  }
}

1 Ответ

0 голосов
/ 01 ноября 2018

На самом деле вам не нужно приостанавливать ExecutorService. Вам нужно блокировать потоки, которые пытаются записать в список, а не приостанавливать пул потоков. Или однажды вы помещаете задачу, которая пишет в базу данных, в этот пул потоков, она приостанавливает пул потоков, включая самого себя, и весь процесс зависает.

Вы можете просто сделать 2 синхронизированных метода - один для записи в список и один для чтения из него, отправки в базу данных и очистки. Они нужны вам в любом случае, поскольку к списку обращаются из разных потоков.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...