使用的后端框架是springboot,这边消耗cpu资源的大概思路是先配置一个线程池,多开线程来消耗cpu资源,然后写一个springboot启动之后第一个执行的类,加上@Order(1)注解,在这个类里面注入线程池,用线程池多开几个线程,每个线程里面都写一个定时器定时调用消耗cpu的方法。
下面上代码
1.springboot启动之后第一个执行的类
@Order(1)
@Component
public class AppStartupRunner implements ApplicationRunner {
@Resource(name = "taskExecutor")
private ThreadPoolTaskExecutor executor;
@Override
public void run(ApplicationArguments args) throws Exception {
executor.execute(()->{
Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
String[] arg = new String[]{};
CPUConsumptionExample.main(arg);
}
},0,5000);
});
}
}
2.消耗cpu资源的类
package com.kaocha.utils;
public class CPUConsumptionExample {
public static void main(String[] args) {
// 定义变量startTime和endTime
long startTime, endTime;
// 获取当前时间
startTime = System.currentTimeMillis();
// 进行循环
while (true) {
// 获取当前时间
endTime = System.currentTimeMillis();
// 判断是否达到消耗CPU时间
if ((endTime - startTime) >= 5000) {
break; // 跳出循环
} else {
// 执行空循环
for (int i = 0; i < 100000; i++) {
// 空循环
}
}
}
// 计算并输出消耗的时间
System.out.println("消耗的CPU时间:" + (endTime - startTime) + "毫秒");
}
}
3.线程池配置类
@Configuration
@EnableAsync
public class AsyncTaskPoolConfig {
@Bean(name = "taskExecutor")
public Executor taskExecutor(){
int i = Runtime.getRuntime().availableProcessors();
System.out.println("系统最大线程数:" + i);
ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();
taskExecutor.setCorePoolSize(i);
taskExecutor.setMaxPoolSize(i);
taskExecutor.setQueueCapacity(99999);
taskExecutor.setKeepAliveSeconds(60);
taskExecutor.setThreadNamePrefix("taskExecutor--");
taskExecutor.setWaitForTasksToCompleteOnShutdown(true);
taskExecutor.setAwaitTerminationSeconds(60);
return taskExecutor;
}
}