Java 如何在rejectedExecution中获取一些业务参数?
Java多线程执行任务,并显式构造Java 如何在rejectedExecution中获取一些业务参数?,java,threadpoolexecutor,Java,Threadpoolexecutor,Java多线程执行任务,并显式构造ThreadPoolExecutor,如下所示 final ExecutorService threadPool = new ThreadPoolExecutor(nThreads, nThreads, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<>(1), myRejectedExecutionHandler); 但是我怎样才
ThreadPoolExecutor
,如下所示
final ExecutorService threadPool = new ThreadPoolExecutor(nThreads, nThreads,
0L, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<>(1), myRejectedExecutionHandler);
但是我怎样才能得到articleId呢?因为我想将被拒绝的articleId记录在rejectedExecution
中,例如
log.warn("article: {} is rejected, please process it manually", articleId);
我的解决方案是:不要使用自定义rejectedExecutionHandler并捕获RejectedExecutionException
catchRejectedException(()->CompletableFuture.supplyAsync(() -> articleId, threadPool), articleId);
private void catchRejectedException(Runnable task, int articleId) {
try {
task.run();
} catch (RejectedExecutionException e) {
log.error("article: {} is rejected", articleId, e);
}
}
log.warn("article: {} is rejected, please process it manually", articleId);
catchRejectedException(()->CompletableFuture.supplyAsync(() -> articleId, threadPool), articleId);
private void catchRejectedException(Runnable task, int articleId) {
try {
task.run();
} catch (RejectedExecutionException e) {
log.error("article: {} is rejected", articleId, e);
}
}