在 java 中暂停 ExecutorService

Pause an ExecutorService in java

我有很多数据要处理并插入到一个列表中,然后我需要将这个列表插入到我的数据库中,每次它里面有 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<>();
  }
}

其实不需要暂停ExecutorService。您需要的是阻止尝试写入列表的线程,而不是暂停线程池。否则有一天你将写入数据库的任务放在那个线程池中,它会暂停包括它自己在内的线程池,然后整个进程挂起。

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