网站建设sz886,徐州网络建站模板,手机商城网站源码,网站开发合作运营平台合同场景
关于线程池的使用#xff1a;
Java中ExecutorService线程池的使用(Runnable和Callable多线程实现)#xff1a;
Java中ExecutorService线程池的使用(Runnable和Callable多线程实现)_executorservice executorservice executors.newfix-CSDN博客
Java中创建线程的方式…场景
关于线程池的使用
Java中ExecutorService线程池的使用(Runnable和Callable多线程实现)
Java中ExecutorService线程池的使用(Runnable和Callable多线程实现)_executorservice executorservice executors.newfix-CSDN博客
Java中创建线程的方式以及线程池创建的方式、推荐使用ThreadPoolExecutor以及示例
Java中创建线程的方式以及线程池创建的方式、推荐使用ThreadPoolExecutor以及示例_threadpoolexecutor创建线程-CSDN博客
项目开发中多使用SpringBootSpring中有个自带的线程池ThreadPoolTaskExecutor
Spring 通过任务执行器TaskExecutor来实现多线程和并发编程使用ThreadPoolTaskExecutor实现一个基于线程池的TaskExecutor
ThreadPoolTaskExecutor是spring core包中的而ThreadPoolExecutor是JDK中的JUC。
ThreadPoolTaskExecutor是对ThreadPoolExecutor进行了封装处理。
ThreadPoolTaskExecutor这个类则是spring包下的是spring为我们提供的线程池类。
SpringBoot默认情况下帮我们自动配置了ThreadPoolTaskExecutor到IOC容器中我们需要的时候直接注入使用即可。
如果我们不想要SpringBoot帮我们默认配置的线程池参数我们可以自行配置ThreadPoolTaskExecutor支持对线程池核心参数的重新配置。
注
博客霸道流氓气质-CSDN博客
实现
1、以若依项目为例
若依前后端分离版手把手教你本地搭建环境并运行项目
若依前后端分离版手把手教你本地搭建环境并运行项目_本地运行若依前后端分离-CSDN博客
ruoyi中对Spring默认的线程池参数进行配置配置文件位置 配置文件内容
package com.ruoyi.framework.config;import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.ThreadPoolExecutor;
import org.apache.commons.lang3.concurrent.BasicThreadFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import com.ruoyi.common.utils.Threads;/*** 线程池配置** author ruoyi**/
Configuration
public class ThreadPoolConfig
{// 核心线程池大小private int corePoolSize 50;// 最大可创建的线程数private int maxPoolSize 200;// 队列最大长度private int queueCapacity 1000;// 线程池维护线程所允许的空闲时间private int keepAliveSeconds 300;Bean(name threadPoolTaskExecutor)public ThreadPoolTaskExecutor threadPoolTaskExecutor(){ThreadPoolTaskExecutor executor new ThreadPoolTaskExecutor();executor.setMaxPoolSize(maxPoolSize);executor.setCorePoolSize(corePoolSize);executor.setQueueCapacity(queueCapacity);executor.setKeepAliveSeconds(keepAliveSeconds);// 线程池对拒绝任务(无线程可用)的处理策略executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());return executor;}
}
2、Java中使用CompletableFuture实现异步任务
Java8中CompletableFuture实现异步任务编排以及示例:
Java8中CompletableFuture实现异步任务编排以及示例_java并发 completablefuture异步编程的实现-CSDN博客
3、在需要使用线程池的地方直接注入 Autowiredprivate ThreadPoolTaskExecutor threadPoolTaskExecutor;
4、线程池的使用
编写单元测试并统计耗时 Testpublic void test2() {StopWatch stopWatch new StopWatch();stopWatch.start();for (int i 0; i 5; i) {int finalI i;CompletableFuture.runAsync(() - {System.out.println(finalI 执行异步操作。。。);int result 0;for (int j 0; j 1000000; j) {result j;}System.out.println(计算结果:result);}, threadPoolTaskExecutor);}stopWatch.stop();System.out.println(总耗时stopWatch.getLastTaskTimeMillis());}
运行结果 为形成对比编写以下测试 Testpublic void test1() {StopWatch stopWatch new StopWatch();stopWatch.start();for (int i 0; i 5; i) {int result 0;for (int j 0; j 1000000; j) {result j;}System.out.println(计算结果:result);}stopWatch.stop();System.out.println(总耗时stopWatch.getLastTaskTimeMillis());}
运行结果