ThreadPoolService.java 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. package com.boman.domain.utils;
  2. import com.google.common.util.concurrent.ThreadFactoryBuilder;
  3. import org.springframework.stereotype.Service;
  4. import java.util.concurrent.*;
  5. /**
  6. * @author shiqian
  7. * @desc 线程池
  8. * @date 2021年09月09日 14:56
  9. **/
  10. @Service
  11. public class ThreadPoolService {
  12. /**
  13. * 自定义线程名称,方便的出错的时候溯源
  14. */
  15. private static final ThreadFactory THREAD_FACTORY = new ThreadFactoryBuilder().setNameFormat("myself-pool-%d").build();
  16. /**
  17. * 功能描述:
  18. *
  19. * @param corePoolSize 线程池核心池的大小
  20. * @param maximumPoolSize 线程池中允许的最大线程数量
  21. * @param keepAliveTime 当线程数大于核心时,此为终止前多余的空闲线程等待新任务的最长时间
  22. * @param unit keepAliveTime 的时间单位
  23. * @param workQueue 用来储存等待执行任务的队列
  24. * @param threadFactory 创建线程的工厂类
  25. * @param handler 拒绝策略类,当线程池数量达到上线并且workQueue队列长度达到上限时就需要对到来的任务做拒绝处理
  26. * @return ExecutorService
  27. */
  28. private static final ExecutorService EXECUTOR_SERVICE = new ThreadPoolExecutor(
  29. 4,
  30. 40,
  31. 0L,
  32. TimeUnit.MILLISECONDS,
  33. new LinkedBlockingQueue<>(1024),
  34. THREAD_FACTORY,
  35. new ThreadPoolExecutor.AbortPolicy()
  36. );
  37. /**
  38. * 获取线程池
  39. *
  40. * @return 线程池
  41. */
  42. private static ExecutorService getEs() {
  43. return EXECUTOR_SERVICE;
  44. }
  45. /**
  46. * 使用线程池创建线程并异步执行任务 ps:无返回值
  47. *
  48. * @param runnable 任务
  49. */
  50. public static void execute(Runnable runnable) {
  51. getEs().execute(runnable);
  52. }
  53. }