package com.zy.acs.manager.core.service;
|
|
import com.google.common.util.concurrent.ThreadFactoryBuilder;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.beans.factory.DisposableBean;
|
import org.springframework.stereotype.Component;
|
|
import java.util.concurrent.ExecutorService;
|
import java.util.concurrent.LinkedBlockingQueue;
|
import java.util.concurrent.ThreadPoolExecutor;
|
import java.util.concurrent.TimeUnit;
|
|
/**
|
* 总线程
|
* Created by vincent on 2019-04-03
|
*/
|
@Slf4j
|
@Component
|
public class ThreadPoolRegulator implements DisposableBean {
|
|
private static final int cpus = Runtime.getRuntime().availableProcessors();
|
|
private ExecutorService executorService;
|
|
public ExecutorService getInstance() {
|
if (null == executorService){
|
executorService = new ThreadPoolExecutor(
|
cpus, // number of core threads
|
cpus << 3, // max count ===>> recycle
|
5 , TimeUnit.SECONDS,
|
new LinkedBlockingQueue<>(512),
|
new ThreadFactoryBuilder().setNameFormat("Matrix-Deal-Pool").build(),
|
new ThreadPoolExecutor.CallerRunsPolicy());
|
}
|
|
return executorService;
|
}
|
|
|
@Override
|
public void destroy() {
|
if (executorService != null && !executorService.isShutdown()) {
|
executorService.shutdown();
|
}
|
}
|
|
}
|