我有很多数据要处理并插入到列表中,所以每当其中包含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<>();
}
}
答案 0 :(得分:1)
实际上,您无需暂停ExecutorService。您需要阻止尝试写入列表的线程,而不是暂停线程池。否则,有一天,您将要写入数据库的任务放在该线程池中,它将暂停线程池(包括其自身),并且整个过程将挂起。
您可以简单地创建2种同步方法-一种写入列表,从列表中读取,推送到数据库并清除它。无论如何,您都需要它们,因为列表是从不同的线程访问的。