@RestController
public class ApplicationTaskExecutorController {
/**
* 使用spring的默认线程池
*/
@Autowired
private ThreadPoolTaskExecutor applicationTaskExecutor;
/**
* 串行计算
*/
@RequestMapping("save1")
public String calculateOne() {
Long start = System.currentTimeMillis();
// 1000ms
doWork1();
// 1500ms
doWork2();
Long end = System.currentTimeMillis();
return "cost time "+(end - start)+"ms";
}
/**
* 并行计算,不需要获取子任务的结果
*/
@RequestMapping("save2")
public String calculate2() throws InterruptedException, ExecutionException {
Long start = System.currentTimeMillis();
CompletableFuture<Void> work1Future = CompletableFuture.runAsync(this::doWork1,applicationTaskExecutor);
CompletableFuture<Void> work2Future = CompletableFuture.runAsync(this::doWork2,applicationTaskExecutor);
CompletableFuture.allOf(work1Future, work2Future).get();
Long end = System.currentTimeMillis();
return "cost time "+(end - start)+"ms";
}
/**
* 并行计算 需要获取子任务的结果
*/
@RequestMapping("save3")
public String calculate3() throws InterruptedException, ExecutionException {
Long start = System.currentTimeMillis();
CompletableFuture<Long> work1Future = CompletableFuture.supplyAsync(this::doWork1,applicationTaskExecutor);
CompletableFuture<Long> work2Future = CompletableFuture.supplyAsync(this::doWork2,applicationTaskExecutor);
CompletableFuture.allOf(work1Future,work2Future).get();
Long end = System.currentTimeMillis();
return "cost time "+(end - start)+"ms;"+"work1Future value "+work1Future.get()+",work2Future value "+ work2Future.get();
}
private Long doWork2() {
try {
Thread.sleep(1500L);
System.out.println("正在进行work2");
} catch (InterruptedException e) {
e.printStackTrace();
}
return 1500L;
}
private Long doWork1() {
try {
Thread.sleep(1000L);
System.out.println("正在进行work2");
} catch (InterruptedException e) {
e.printStackTrace();
}
return 1000L;
}
}
【业务线程池】 业务线程池实现多个任务并行处理
最新推荐文章于 2024-08-15 10:46:07 发布