一种spring自带线程池
springBoot自带执行器:ThreadPoolTaskExecutor
使用方法:
config
类上:添加注解@EnableAsync
方法上:@Bean
service层
方法上:@Async("asyncServiceExecutor") 即可
六种常见的线程池:
1、FixedThreadPool;
有活了雇一个人,最多雇10个人,轮流搬箱子,没活了就呆着,日工
2、CachedThreadPool;
有个总管,来活了,指派给一个人,如果没有人就雇人后再指派,没活了( 60 秒后)就辞退,再来活了再招,分钟工
3、ScheduledThreadPool;
0、ScheduledExecutorService service = Executors.newScheduledThreadPool(10);
1、service.schedule(new Task(), 10, TimeUnit.SECONDS);
延迟10秒执行一次。
预约1天后安排一个人干活,什么时候干完什么时候走人,
包工
2、service.scheduleAtFixedRate(new Task(), 10, 10, TimeUnit.SECONDS);
延迟10秒执行一次,后期每10秒执行一次。
预约1天后安排一个人干活,以后每小时安排个活,
长期工,明天入职后,不管死活入职后每间隔小时都安排任务
3、service.scheduleWithFixedDelay(new Task(), 10, 10, TimeUnit.SECONDS);
延迟10秒执行一次,执行完成后每10秒再执行一次。
预约1天后安排一个人干活,干完活以后10秒再安排个活。
国企,明天入职后,每次完成任务后休息1个小时再安排新任务
4、SingleThreadExecutor;
垄断,关系户,不允许共同工作,有活了一个人慢慢干
5、SingleThreadScheduledExecutor;
类似于垄断的工地3
6、ForkJoinPool;JDK 7
1、队列任务分裂n个任务处理,再从n中取,n个任务处理完成后再合并完成一个线程的任务
2、线程之间互相帮助,每个线程的n个任务存放于双端队列 deque,
双端队列很好地平衡了各线程的负载
甲乙两个民工吃饭
每个人吃(n个任务)一个馒头、4个菜、一个鸡腿
甲刚吃馒头,乙已经吃完了,偷了甲的鸡腿