55 lines
1.6 KiB
Java
55 lines
1.6 KiB
Java
package com.usthe.alert;
|
|
|
|
import com.google.common.util.concurrent.ThreadFactoryBuilder;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import org.springframework.stereotype.Component;
|
|
|
|
import java.util.concurrent.RejectedExecutionException;
|
|
import java.util.concurrent.SynchronousQueue;
|
|
import java.util.concurrent.ThreadFactory;
|
|
import java.util.concurrent.ThreadPoolExecutor;
|
|
import java.util.concurrent.TimeUnit;
|
|
|
|
/**
|
|
* warehouse 工作线程池
|
|
* @author tom
|
|
* @date 2021/11/24 18:09
|
|
*/
|
|
@Component
|
|
@Slf4j
|
|
public class AlerterWorkerPool {
|
|
|
|
private ThreadPoolExecutor workerExecutor;
|
|
|
|
public AlerterWorkerPool() {
|
|
initWorkExecutor();
|
|
}
|
|
|
|
private void initWorkExecutor() {
|
|
// 线程工厂
|
|
ThreadFactory threadFactory = new ThreadFactoryBuilder()
|
|
.setUncaughtExceptionHandler((thread, throwable) -> {
|
|
log.error("workerExecutor has uncaughtException.");
|
|
log.error(throwable.getMessage(), throwable); })
|
|
.setDaemon(true)
|
|
.setNameFormat("alerter-worker-%d")
|
|
.build();
|
|
workerExecutor = new ThreadPoolExecutor(6,
|
|
10,
|
|
10,
|
|
TimeUnit.SECONDS,
|
|
new SynchronousQueue<>(),
|
|
threadFactory,
|
|
new ThreadPoolExecutor.AbortPolicy());
|
|
}
|
|
|
|
/**
|
|
* 运行alerter任务
|
|
* @param runnable 任务
|
|
* @throws RejectedExecutionException when 线程池满
|
|
*/
|
|
public void executeJob(Runnable runnable) throws RejectedExecutionException {
|
|
workerExecutor.execute(runnable);
|
|
}
|
|
}
|