暂停Java中的ExecutorService

时间:2018-11-01 06:43:36

标签: java multithreading executorservice

我有很多数据要处理并插入到列表中,所以每当其中包含100k字符串时,我都需要将此列表插入到数据库中。将列表保存到数据库时,如何暂停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 :(得分:1)

实际上,您无需暂停ExecutorService。您需要阻止尝试写入列表的线程,而不是暂停线程池。否则,有一天,您将要写入数据库的任务放在该线程池中,它将暂停线程池(包括其自身),并且整个过程将挂起。

您可以简单地创建2种同步方法-一种写入列表,从列表中读取,推送到数据库并清除它。无论如何,您都需要它们,因为列表是从不同的线程访问的。