【问题标题】:Intermittent 404 error in java multithreading when threads are calling external servicejava多线程中线程调用外部服务时出现间歇性404错误
【发布时间】:2021-05-17 15:51:46
【问题描述】:

我是第一次做多线程,我用过线程池。

private CartResponse executeWithinThreadPool(List<CartSaveMultithreadWorker> workers,
        CartResponse CartResponse) throws CartException {

    ExecutorService executor = Executors.newFixedThreadPool(mapperServiceThreads < 0 ? workers.size()
            : mapperServiceThreads);

    List<Future<CartResponse>> futureList = new ArrayList<>();
    for (CartSaveMultithreadWorker w : workers) {
        Future<CartResponse> future = executor.submit(w);
        futureList.add(future);
    }
    try {
        executor.shutdown();
        boolean workersCompleted = executor.awaitTermination((workers.size() * threadTimeout), TimeUnit.SECONDS);
        if (workersCompleted) {
            LOGGER.info("Executor completed correctly");
        } else {
            LOGGER.error("Executor did not complete successfully");
        }
        boolean isFailed = false;
        for (Future<CartResponse> future : futureList) {
            CartResponse CartResponse1 = future.get();
            if (CartResponse1 != null
                    && CartResponse1.getResponseStatus() != null
                    && !"SUCESS".equalsIgnoreCase(CartResponse1.getResponseStatus().getStatus())) {
                isFailed = true;
                break;
            }

        }
        CartResponse = failureCaseResponse(CartResponse, futureList, isFailed);
    } catch (InterruptedException exception) {
        LOGGER.error("Interrupted exception while executing worker threads: ", exception);
        throw new CartException();

    } catch (Exception exception) {
        LOGGER.error("Exception occurred while executing worker threads", exception);
        throw new CartException();

    } finally {
        if ((!executor.isTerminated()) || (!executor.isShutdown())) {
            executor.shutdownNow();
        }
    }
    return CartResponse;

}

还有我的mapperServiceThreads=3 and timeout=25000

这是从

调用的
for (String item: CartRequest.getItemNumber()) {
                workers.add(new CartSaveMultithreadWorker(cartDao,
                        cartRequest, itemNumber));
            }
...
...
cartResponse1= executeWithinThreadPool(workers, cartResponse);

当购物车中有 6 件商品时,将购物车保存到我的 SOR 时会引发间歇性错误。知道为什么吗?

【问题讨论】:

  • 它会抛出什么错误?

标签: java multithreading executorservice


【解决方案1】:

问题在于从代码调用的服务的速率限制。在修复速率限制后,它开始工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多