老哥们,我老大在循环里写 Thread.sleep,到处都这么写,有问题吗

2021-12-01 09:09:24 +08:00
 Aliberter

他为了实现一个定时任务的功能,因为他说 spring 的定时任务不好用,每次跑着跑着就没了,所以想出来这种写个死循环,然后执行一次就休眠一段时间的方法,但是我看 IDE 都会报警告,说禁止在循环里写 Thread.sleep ,我在 stackoverflow 上看了好多解释的帖子,说很浪费资源,发给他看,他之前说这样写不会浪费资源,看了帖子后又说浪费点资源没事,主要是这样实现的定时任务很稳定,求老哥们的意见,这样到底有没有问题?

8905 次点击
所在节点    Java
66 条回复
railgun
2021-12-01 22:53:03 +08:00
符合业务需求就没有问题
anonymous1024
2021-12-01 23:39:08 +08:00
如果当前操作系统是抢占式内核,在死循环中写 sleep 是可以放弃 cpu 占用时间的,提高其他程序的命中率。
C603H6r18Q1mSP9N
2021-12-02 10:43:24 +08:00
正解:写个 内部请求地址,linux crontab 定时调用这个链接

@corningsun 不会的,crontab 有运维管理的平台统一调度处理的
goalidea
2021-12-02 11:06:20 +08:00
首先不考虑性能的话,能实现就行,其次 sleep 要考虑多线程的问题,毕竟是要抱着锁去睡觉
olaloong
2021-12-02 11:14:12 +08:00
看具体用法吧....我有个 10 秒一次的定时任务就是循环+sleep ,无锁无竞争也不会有啥问题
oOoOoOoOoOo
2021-12-02 15:51:35 +08:00
@code4you

等 sleep 语句删掉的时候:

重新优化了代码结构,缩减了代码行数,提高了运行效率。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/819192

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX