41.安心技术梳理 - 线程池和多线程结合使用 - 直接上干货

mac2024-03-21  28

线程池配置:

spring: pool: corePoolSize: 4 maxPoolSize: 8 keepAliveSeconds: 60 queueCapacity: 1 @ConfigurationProperties("spring.pool") @Component @Data public class ThreadPoolConfig { private int corePoolSize; private int maxPoolSize; private int keepAliveSeconds; private int queueCapacity; }

线程池实例化

@Configuration class TaskPoolConfig { @Bean("disCouponExecutor") public ThreadPoolTaskExecutor disCouponExecutor() { ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); executor.setCorePoolSize(threadPoolConfig.getCorePoolSize()); executor.setMaxPoolSize(threadPoolConfig.getMaxPoolSize()); executor.setQueueCapacity(threadPoolConfig.getQueueCapacity()); executor.setKeepAliveSeconds(threadPoolConfig.getKeepAliveSeconds()); executor.setThreadNamePrefix("disCouponExecutor-"); executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); executor.initialize(); return executor; } }

应用服务:

private String getStr(String str) { System.out.println("执行中:" + str); return str; } @RequestMapping(value = "/handleData", method = {RequestMethod.GET}) public void handleData(HttpServletRequest request) throws InterruptedException { List<String> list1 = new ArrayList<>(); list1.add("1"); list1.add("2"); list1.add("3"); List<Boolean> list2 = new ArrayList<>(); CountDownLatch cancelDownLatch = new CountDownLatch(list1.size()); for (String str : list1) { disCouponExecutor.execute(new Runnable() { @Override public void run() { String str1 = getStr(str); if (str1.equals("1") || str1.equals("2")) { list2.add(true); } cancelDownLatch.countDown(); } }); } cancelDownLatch.await(); System.out.println("执行结束......" + (CollectionUtils.isEmpty(list2) ? 0 : 1)); }
最新回复(0)