package com.zy.acs.gateway; 
 | 
  
 | 
import com.google.common.util.concurrent.ThreadFactoryBuilder; 
 | 
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; 
 | 
import java.util.concurrent.atomic.AtomicInteger; 
 | 
  
 | 
/** 
 | 
 * 总线程 
 | 
 * Created by vincent on 2019-04-03 
 | 
 */ 
 | 
@Component("executors") 
 | 
public class Executors implements DisposableBean { 
 | 
  
 | 
    private static final AtomicInteger count = new AtomicInteger(); 
 | 
  
 | 
    private ExecutorService executorService; 
 | 
  
 | 
    private static final int cpus = Runtime.getRuntime().availableProcessors(); 
 | 
  
 | 
  
 | 
    /** 
 | 
     * 业务线程池 
 | 
     */ 
 | 
    public ExecutorService getInstance() { 
 | 
        if (null == executorService){ 
 | 
            executorService = new ThreadPoolExecutor(cpus, cpus << 3, 
 | 
                    30 , TimeUnit.SECONDS, 
 | 
                    new LinkedBlockingQueue<>(512), 
 | 
                    new ThreadFactoryBuilder().setNameFormat("task-pool").build(), 
 | 
                    new ThreadPoolExecutor.CallerRunsPolicy()); 
 | 
        } 
 | 
  
 | 
        return executorService; 
 | 
  
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 监听器线程池 
 | 
     * 
 | 
     */ 
 | 
    public static ExecutorService getCache() { 
 | 
        return java.util.concurrent.Executors.newFixedThreadPool(cpus >> 1, r -> { 
 | 
            Thread thread = new Thread(r); 
 | 
            thread.setName("zy-acs-task-factory" + count.getAndIncrement()); 
 | 
            if (thread.isDaemon()) { 
 | 
                thread.setDaemon(Boolean.FALSE); 
 | 
            } 
 | 
            thread.setPriority(Thread.NORM_PRIORITY); 
 | 
  
 | 
            return thread; 
 | 
        }); 
 | 
  
 | 
    } 
 | 
  
 | 
  
 | 
    @Override 
 | 
    public void destroy() { 
 | 
        if (executorService != null && !executorService.isShutdown()) { 
 | 
            executorService.shutdown(); 
 | 
        } 
 | 
    } 
 | 
  
 | 
} 
 |