【发布时间】: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