• 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闪

  • 相关阅读:
    编写程序计算所输日期是当年的第几天
    如何使提取的星期为中文
    Recordset.State 属性
    Dependency Walker Frequently Asked Questions
    setlocale
    StringBuilder 拼接sql语句比较快
    用sql 语句给字段添加描述
    委托事件
    将一个tabel加到另一个table
    winform的tab跳到下一个
  • 原文地址:https://www.cnblogs.com/bien94/p/11954310.html
Copyright © 2020-2023  润新知