本文共 1624 字,大约阅读时间需要 5 分钟。
最近有一个需求,前端点击一个按钮,后端需要多线程执行任务,执行完返回结果到前端。使用线程池实现,每次调用新建线程池对象,使用完销毁线程池对象,这个用的是spring线程池,java自带的线程池效果差不多,代码如下:
实现代码:
public String testThreadPool() { ThreadPoolTaskExecutor threadPoolTaskExecutor = ThreadPoolUtils.getThreadPool(); //开启50个线程 for (int i = 1; i <= 50; i++) { int index = i; threadPoolTaskExecutor.execute(new Thread(new Runnable() { @Override public void run() { //TODO 处理业务 System.out.println(index); } })); } while (true) { //sleep 2秒 try { Thread.sleep(200); } catch (InterruptedException e) { e.printStackTrace(); } //如果活跃的线程为0,则说明任务处理完毕 if (threadPoolTaskExecutor.getActiveCount()<1) { System.out.println("结束了!"); //销毁线程池 threadPoolTaskExecutor.destroy(); break; } } return "任务处理完毕!"; }生成线程池的类:
package capital.core.utils;import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;/** * 线程池util * @author tanqian * @date 2018年1月30日 */public class ThreadPoolUtils { /** * 返回一个初始化完成的线程池对象 * @return */ public static ThreadPoolTaskExecutor getThreadPool() { ThreadPoolTaskExecutor threadPoolTaskExecutor = new ThreadPoolTaskExecutor(); //最小线程数 threadPoolTaskExecutor.setCorePoolSize(20); //最大线程数 threadPoolTaskExecutor.setMaxPoolSize(50); //空闲线程存活时间 threadPoolTaskExecutor.setKeepAliveSeconds(1000); //队列中最大线程 threadPoolTaskExecutor.setQueueCapacity(50); //初始化 threadPoolTaskExecutor.initialize(); return threadPoolTaskExecutor; }}
转载地址:http://ahzoi.baihongyu.com/