今天遇到一个奇怪的需求:需要在某个操作后,延迟10min执行另一个操作。
一 新建线程
首先想到的方法便是新建一个线程完成此操作:
![](https://img-blog.csdn.net/20180917201723688?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1RvbUNvc2lu/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
输出
![](https://img-blog.csdn.net/20180917201757941?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1RvbUNvc2lu/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
看起来这个操作没有问题 ,但是现在项目中就有问题了。
![](https://img-blog.csdn.net/20180917201953646?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1RvbUNvc2lu/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
这是阿里代码检查工具的提示。
试想一下,每次进行这种操作便新建线程是不可取的,如果这个操作执行多次,便会创建大量线程,对虚拟机运行造成巨大的压力。
二 使用线程池
![](https://img-blog.csdn.net/20180917202518393?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1RvbUNvc2lu/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
输出结果
![](https://img-blog.csdn.net/201809172025399?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1RvbUNvc2lu/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
在项目中当然也可以将线程池交给spring进行维护
三 spring线程池
![](https://img-blog.csdn.net/20180917203305345?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1RvbUNvc2lu/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
接下来就是项目中注入并使用这个threadPool对象了
![](https://img-blog.csdn.net/20180917203634909?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1RvbUNvc2lu/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
spring中还有一个ThreadTask,有时间的朋友可以去研究研究。