GoSang 2021-09-18 16:08 采纳率: 0%
浏览 98

来看看某位同学的代码。各位能找出多少问题点?很经典

其中list有几十万条数据

public void saveData(Auth auth, List<DataCenterTag> list) {
        //启动多线程,一次200条纪录
        int size = list.size() / AMOUNT;
        if (size == 0) {
            saveList(auth, list);
            return;
        }
        CountDownLatch latch = new CountDownLatch(size);
        ExecutorService service = Executors.newFixedThreadPool(size);
        for (int i = 0; i < size; i++) {
            List<DataCenterTag> executeList = list.subList(i * AMOUNT, (i + 1) * AMOUNT);
            service.submit(() -> {
                try {
                    saveList(auth, executeList);
                } finally {
                    latch.countDown();
                }
            });
        }
        saveList(auth, list.subList(size * AMOUNT, list.size()));
        try {
            latch.await();
        } catch (InterruptedException e) {
            log.error("标签导入线程池中断异常");
        }
        service.shutdown();
    }

  • 写回答

3条回答 默认 最新

  • 走一步-再走一步 2021-09-18 16:16
    关注

    1.怎么开启那么多线程,上下文切换还不搞死
    2.subList 保存了父类的副本,内存也要崩溃

    评论

报告相同问题?

问题事件

  • 创建了问题 9月18日