刚了解到一个ThreadPoolExecutor
具体使用方法较为简单,线程池设置是对参数进行设置
直接走起
//创建线程池
ThreadPoolExecutor threadPoolExecutor=new ThreadPoolExecutor(
1,1,10,//参数1为线程池的最大线程数,参数2为当前线程数大于核心时,
TimeUnit.SECONDS,
new ArrayBlockingQueue<>(1),
new ThreadPoolExecutor.DiscardOldestPolicy());
threadPoolExecutor.execute(()->{
try{
CompletableFuture.supplyAsync(new Supplier<String>() {
@Override
public String get() {
System.out.println("异步开始");
logger.info("异步开始");
try {
Thread.sleep(60000);//间隔1分钟后执行异步中代码
} catch (InterruptedException e) {
e.printStackTrace();
}
//中间放代码即可
System.out.println("异步结束");
logger.info("异步结束");
return null;
}
});
}catch (Exception e){
e.printStackTrace();
}finally {
System.out.println("线程结束"+ktOrderNo);
logger.info("主线程结束"+ktOrderNo);
}
});
// public ThreadPoolExecutor(
// int corePoolSize, - 线程池核心池的大小。
// int maximumPoolSize, - 线程池的最大线程数。
// long keepAliveTime, - 当线程数大于核心时,此为终止前多余的空闲线程等待新任务的最长时间。
// TimeUnit unit, - keepAliveTime 的时间单位。
// BlockingQueue<Runnable> workQueue, - 用来储存等待执行任务的队列。
// ThreadFactory threadFactory, - 线程工厂。
// RejectedExecutionHandler handler) - 拒绝策略。
想要了解具体使用方式请仔细阅读以下两篇文章
通过一次代码校验发现 线程池不建议使用Executors去创建,而是通过ThreadPoolExecutor方式的原因 顺便总结线程优缺点
https://blog.csdn.net/qq_31615049/article/details/80756781
CompletableFuture使用详解
https://blog.csdn.net/jiangtianjiao/article/details/105967967
感谢支持