• JDK线程池和Spring线程池的使用


    JDK线程池和Spring线程池实例,异步调用,可以直接使用
    (1)JDK线程池的使用,此处采用单例的方式提供,见示例:
    public class ThreadPoolUtil {
    private static int corePoolSize = 5;
    private static int maximumPoolSize = 10;
    private static long keepAliveTime = 60L;
    private static TimeUnit unit = TimeUnit.SECONDS;
    private static int capacity = 1024;
    private static ThreadFactory namedThreadFactory = new ThreadFactoryBuilder().setNameFormat("jdk-thread-pool-%d").build();
    private static final ExecutorService executorService = new ThreadPoolExecutor(corePoolSize,
    maximumPoolSize,
    keepAliveTime,
    unit,
    new LinkedBlockingQueue<>(capacity),
    namedThreadFactory,
    new ThreadPoolExecutor.AbortPolicy());
    
    private ThreadPoolUtil () {
    
    }
    
    public static ExecutorService getExecutorService () {
    return executorService;
    }
    }
    
    在其它地方可以直接这样使用:
    ThreadPoolUtil.getExecutorService().execute(() -> {
    System.out.println("test1");
    System.out.println("test2");
    })
    
    (2)Spring线程池的使用,此处通过配置类的方式配置线程池的相关属性,见示例:
    @Configuration
    @EnableAsync
    public class DocataThreadBeanConfig {private int corePoolSize = 5;private int maxPoolSize = 10;private int queueCapacity = 1024;private String namePrefix = "async-service-task-";
    // 上述属性可以通过@Value来读取配置值 @Bean(name
    = "asyncServiceTaskExecutor") public TaskExecutor asyncServiceExecutor() { ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); // 设置核心线程数 executor.setCorePoolSize(corePoolSize); // 设置最大线程数 executor.setMaxPoolSize(maxPoolSize); // 设置队列容量 executor.setQueueCapacity(queueCapacity); // 设置线程活跃时间(秒) executor.setKeepAliveSeconds(60); // 设置默认线程名称 executor.setThreadNamePrefix(namePrefix); // 设置拒绝策略 executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); // 等待所有任务结束后再关闭线程池 executor.setWaitForTasksToCompleteOnShutdown(true); executor.initialize();; return executor; } } 在其它文件中需要这样使用: @Resource(name="asyncServiceTaskExecutor") private ThreadPoolTaskExecutor asyncServiceTaskExecutor; 不要直接使用@Autowired,否则会提示失败的 @Autowired private ThreadPoolTaskExecutor asyncServiceTaskExecutor;

    ------20191128闪

  • 相关阅读:
    [LOJ 6436][PKUSC2018] 神仙的游戏
    [BZOJ 2653] middle
    [WC2018] 州区划分
    [BZOJ 4556][Tjoi2016&Heoi2016]字符串
    [BZOJ 3514]Codechef MARCH14 GERALD07加强版 (CHEF AND GRAPH QUERIES)
    [BZOJ 4573][ZJOI 2016]大♂森林
    Problem 2322. -- [BeiJing2011]梦想封印
    [BZOJ 2555] SubString
    [日常] NOIWC2019 冬眠记
    [BZOJ 4036][HAOI2015]按位或
  • 原文地址:https://www.cnblogs.com/bien94/p/11954310.html
Copyright © 2020-2023  润新知