| 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(); | 
|         } | 
|     } | 
|   | 
| } |