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

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

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

8559 次点击
所在节点    Java
66 条回复
0xZhangKe
2021-12-01 11:09:04 +08:00
性能问题要有数据对比,你能拿出数据才能证明真的有问题,否则都是空谈。
xiaoyang7545
2021-12-01 11:20:23 +08:00
很简单,你能不能有更好的方式来解决现有问题。如果有,就调整一下给他看看是否可以用。如果没有,在那边说这样不行那样不行意义不大。
ch2
2021-12-01 11:35:30 +08:00
又不是不能用.jpg
liudaolunhuibl
2021-12-01 11:36:55 +08:00
sleep 的问题应该是线程状态切换,唤醒和进入休眠都要耗费 CPU 资源的,但是不是太频繁的话理论上还好,虽然算是野路子但是这也是一种解决办法吧,不过更好的是配置 spring 定时任务线程池或者换成其他的框架比如 XxlJob
easing
2021-12-01 11:42:50 +08:00
@Aliberter #13 并不是,sleep 会切换出去的(最后走 futex_wait ),如果 sleep 时间挺长,其实没啥问题。而且确实稳定。
meeop
2021-12-01 11:44:00 +08:00
代码工作正常,没有性能问题爱怎么写怎么写,并无不妥

你觉得高级的做法也并不是最佳实践,就算改了,重构后效果和重构前差不多,没啥用

除非,你趁机牵头搞一个公司内部的服务调度框架 /中台 /平台,那还不错
ForkNMB
2021-12-01 12:07:27 +08:00
不是 。定时任务为啥要用 Spring 自带的,贼不好用,为啥不用 XXLJOB
BBCCBB
2021-12-01 12:14:25 +08:00
4L 正解.
jackzhengjbs
2021-12-01 12:41:05 +08:00
我是你领导,下班之后来我办公室,🐶头
shanghai1998
2021-12-01 13:52:16 +08:00
正解:写个 内部请求地址,linux crontab 定时调用这个链接
code4you
2021-12-01 14:10:40 +08:00
性能优化

以前 Thread.sleep(10000)

优化 Thread.sleep(1000)

再次优化 Thread.sleep(100)

极度优化 Thread.sleep(10)

😁
corningsun
2021-12-01 14:36:12 +08:00
@shanghai1998 自己用着爽,运维火葬场。
Jooooooooo
2021-12-01 14:55:59 +08:00
sleep 当然不会消耗资源

这当然也是也是一种定时任务的办法

你领导说的不靠谱的现象确实存在, 要是异常没处理好, 定时任务可能就会没了
Lemeng
2021-12-01 14:56:16 +08:00
出问题,不用自己负责的事,不操心,呵呵
zhuangzhuang1988
2021-12-01 15:18:42 +08:00
ligiggy
2021-12-01 16:10:12 +08:00
@code4you 致富之路
fangcan
2021-12-01 17:18:30 +08:00
可以发信息再找他确认下,留下证据
yousabuk
2021-12-01 20:25:08 +08:00
犟啥呢,已经出现对你的所有建议看都不看直接否定的情况了。

小心了,对你有意见了已经。
AlexRoot
2021-12-01 21:33:14 +08:00
@Aliberter 这种老大,建议跑路,感觉以后要背大锅。
kaneg
2021-12-01 22:22:28 +08:00
sleep 是会一直占用当前线程,应该用 object 的 wait 方法。
如果只是用定时,可以用 ScheduledExecutorService

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

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

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

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

© 2021 V2EX