parent
4fa818b98c
commit
5f697ceb21
@ -0,0 +1,52 @@ |
||||
package digital.laboratory.platform.entrustment.config; |
||||
|
||||
import lombok.extern.slf4j.Slf4j; |
||||
import org.springframework.stereotype.Component; |
||||
|
||||
import javax.annotation.PreDestroy; |
||||
import java.util.concurrent.*; |
||||
|
||||
/** |
||||
* 定义全局线程池 |
||||
*/ |
||||
@Slf4j |
||||
@Component |
||||
public class GlobalThreadPool { |
||||
|
||||
// 定义全局线程池,使用单列模式
|
||||
private static final ExecutorService THREAD_POOL = new ThreadPoolExecutor( |
||||
10, // 核心线程数
|
||||
50, // 最大线程数
|
||||
60L, TimeUnit.SECONDS, // 空闲线程存活时间
|
||||
new LinkedBlockingQueue<Runnable>(100), // 任务队列
|
||||
Executors.defaultThreadFactory(), // 线程工厂
|
||||
new ThreadPoolExecutor.CallerRunsPolicy() // 拒绝策略
|
||||
); |
||||
|
||||
// 私有化构造方法,防止外部实例化
|
||||
private GlobalThreadPool() {} |
||||
|
||||
// 获取全局线程池实列
|
||||
public static ExecutorService getInstance() { |
||||
return THREAD_POOL; |
||||
} |
||||
|
||||
// 关闭线程池
|
||||
public static void shutdown() { |
||||
THREAD_POOL.shutdown(); |
||||
} |
||||
|
||||
// 在应用关闭前执行
|
||||
@PreDestroy |
||||
public void destroy() { |
||||
log.info("Spring 应用关闭,正在关闭线程池..."); |
||||
shutdown(); |
||||
try { |
||||
if (!THREAD_POOL.awaitTermination(60, TimeUnit.SECONDS)) { |
||||
THREAD_POOL.shutdownNow(); |
||||
} |
||||
} catch (InterruptedException e) { |
||||
THREAD_POOL.shutdownNow(); |
||||
} |
||||
} |
||||
} |
Loading…
Reference in new issue