package tech.powerjob.server.common.thread; import lombok.extern.slf4j.Slf4j; import java.util.concurrent.RejectedExecutionHandler; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.atomic.AtomicLong; /** * @author Echo009 * @since 2022/10/12 */ @Slf4j public class NewThreadRunRejectedExecutionHandler implements RejectedExecutionHandler { private static final AtomicLong COUNTER = new AtomicLong(); private final String source; public NewThreadRunRejectedExecutionHandler(String source) { this.source = source; } @Override public void rejectedExecution(Runnable r, ThreadPoolExecutor p) { log.error("[{}] ThreadPool[{}] overload, the task[{}] will run by a new thread!, Maybe you need to adjust the ThreadPool config!", source, p, r); if (!p.isShutdown()) { String threadName = source + "-T-" + COUNTER.getAndIncrement(); log.info("[{}] create new thread[{}] to run job", source, threadName); new Thread(r, threadName).start(); } } }