关于timer计时器的问题

菊花 ღ 2021-01-23 11:33:05
有这样一个计时器:每间隔15秒运行一个任务,这个任务可能需要超过15秒的时间才能运行完。那么如何在到了15秒之后继续运行还没运行完的任务,同时继续运行下一个任务呢?
...全文
867 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
快乐胖电工 2021-02-08
  • 打赏
  • 举报
回复
学习了,谢谢
sunyiz 2021-01-28
  • 打赏
  • 举报
回复
引用 7 楼 qybao 的回复:
没有人在说好几个 schedule ,都在说只有一个 schedule ,不要把你的理解强加在别人身上。 难道不能在schedule里new一个线程来执行任务?schedule可以结束,但是new出来的线程还在继续执行任务。你最好先理解一下什么是异步处理
好的,是我理解错误
qybao 2021-01-28
  • 打赏
  • 举报
回复
引用 6 楼 sunyiz 的回复:
楼上很多人似乎都是在答非所问 他们都是在说 schedule 了好几个 Task 的情况 而我理解楼主应该问的就是 schedule 了一个 Task 的情况 不知道是他们理解的对,还是我理解的对
没有人在说好几个 schedule ,都在说只有一个 schedule ,不要把你的理解强加在别人身上。 难道不能在schedule里new一个线程来执行任务?schedule可以结束,但是new出来的线程还在继续执行任务。你最好先理解一下什么是异步处理
sunyiz 2021-01-27
  • 打赏
  • 举报
回复
楼上很多人似乎都是在答非所问 他们都是在说 schedule 了好几个 Task 的情况 而我理解楼主应该问的就是 schedule 了一个 Task 的情况 不知道是他们理解的对,还是我理解的对
sunyiz 2021-01-27
  • 打赏
  • 举报
回复
这个问题我以前正好在一本比较偏门的书上看到过 如果你用的是 java.util.Timer 的话,那你执行一个任务时,有两个模式: schedule scheduleAtFixedRate 这两个模式,如果你每次任务的执行都超过你的周期,那么实际上执行效果区别不大 都是一到你上个任务执行完,立刻执行下一个任务 (同一个任务,都是单线程执行的,不会出现线程冲突) 但是如果你的这个任务执行时间不确定, 那么区别能显现出来: schedule,如果你上次任务超时了,下次任务立刻执行 如果你上次任务没超时,那么下次任务一定是在下一个周期时执行(和你上一次任务开始执行的时间对比) scheduleAtFixedRate,他会尝试赶上你之前因为任务超时而延迟的时间 如果你某次任务超时了,那么之后的任务都会连续不断的执行 直到进度赶上理论周期(和最开始的执行时间对比) 总结: schedule 和 scheduleAtFixedRate 的主要区别就是: 前者每次执行时,都是和“上一次”的开始执行时间比对 后者每次执行时,都是和“最开始”的开始执行时间比对
爱摸鱼de老邪 2021-01-27
  • 打赏
  • 举报
回复
如果没有互斥资源,那就异步执行即可,如果有,线程间进行同步
qybao 2021-01-25
  • 打赏
  • 举报
回复
如果这些任务可以并行(也就是前一个还没完成,后一个也可以执行),那就每隔15秒用一个线程来启动执行任务。
maradona1984 2021-01-25
  • 打赏
  • 举报
回复
异步套异步就好了,新开线程任务自然秒完成.
啥都无所谓 2021-01-25
  • 打赏
  • 举报
回复
直接线程池。每次任务就给一个,完了关闭

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧