之前写了一个手动创建线程池的实现,自定义了factory和handler,记录一下
ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(
1,
threadNumbers,
60L,
TimeUnit.SECONDS,
new SynchronousQueue<>(),
new CustomThreadFactory(),
new CustomRejectedExecutionHandler());
public class CustomThreadFactory implements ThreadFactory {
private AtomicInteger count = new AtomicInteger(0);
@Override
public Thread newThread(Runnable r) {
Thread t = new Thread(r);
String threadName = KafkaProcessThread.class.getSimpleName() + count.addAndGet(1);
t.setName(threadName);
return t;
}
}
public class CustomRejectedExecutionHandler implements RejectedExecutionHandler {
private static final Logger logger = LoggerFactory.getLogger(CustomRejectedExecutionHandler.class);
@Override
public void rejectedExecution(Runnable r, ThreadPoolExecutor executor) {
try {
executor.getQueue().put(r);
} catch (InterruptedException e) {
logger.error("Put task to queue exception!!!", e);
}
}
}