今天遇到一个奇怪的需求:需要在某个操作后,延迟10min执行另一个操作。
一 新建线程
首先想到的方法便是新建一个线程完成此操作:
![](https://i-blog.csdnimg.cn/blog_migrate/667ee681366b2fc4bb2b9594a3d0cf76.png)
输出
![](https://i-blog.csdnimg.cn/blog_migrate/34b9e77134576692932b9e844e11b824.png)
看起来这个操作没有问题 ,但是现在项目中就有问题了。
![](https://i-blog.csdnimg.cn/blog_migrate/3b48854dfb83ee0ce1d90fb42049c6c0.png)
这是阿里代码检查工具的提示。
试想一下,每次进行这种操作便新建线程是不可取的,如果这个操作执行多次,便会创建大量线程,对虚拟机运行造成巨大的压力。
二 使用线程池
![](https://i-blog.csdnimg.cn/blog_migrate/59665d4c283465270a1d09b120749f4d.png)
输出结果
![](https://i-blog.csdnimg.cn/blog_migrate/63b33400abfeec41b8be68447bd22c9d.png)
在项目中当然也可以将线程池交给spring进行维护
三 spring线程池
![](https://i-blog.csdnimg.cn/blog_migrate/646d9084ea359c20ac4180f4582ad1bc.png)
接下来就是项目中注入并使用这个threadPool对象了
![](https://i-blog.csdnimg.cn/blog_migrate/3cda1bcbbb151687bc2973b79b9cc8e1.png)
spring中还有一个ThreadTask,有时间的朋友可以去研究研究。