looky9 2014-09-22 02:30 采纳率: 0%
浏览 2399

java scheduleAtFixedRate 重复执行多次

我有一jar程序,mainclass里启动了多个timer ,我监测到其中某个timer(设定是24小时执行一次)但是在启动的时候被执行了几百次,其他 的几个timer没有注意到,谁知道这个是怎么回事?或者是某地方有什么问题?long period = 24 * 60 * 60 * 1000;Calendar calendar = Calendar.getInstance();new Timer().scheduleAtFixedRate(new UserTimerTask(), calendar.getTime(), period);

  • 写回答

1条回答

  • CSDN-Ada助手 CSDN-AI 官方账号 2022-09-21 01:54
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:
    • 建议你看下这篇博客👉 :Java多线程问题--schedule函数和scheduleAtFixedRate的用法和区别
    • 除此之外, 这篇博客: Java定时线程实现:scheduleAtFixedRate 和 scheduleWithFixedDelay 的差别中的 问题2:上面的情况为什么不直接new线程去执行任务,而是把任务丢到队列里等着? 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

      就好比一个国企里面有10个(core)正式工的名额,最多招10个正式工,要是任务超过正式工人数(task > core)的情况下,工厂领导(线程池)不是首先扩招工人,还是这10人,但是任务可以稍微积压一下,即先放到队列去(代价低)。10个正式工慢慢干,迟早会干完的,要是任务还在继续增加,超过正式工的加班忍耐极限了(队列满了),就的招临时工帮忙了(注意是临时工)要是正式工加上临时工还是不能完成任务,那新来的任务就会被领导拒绝了(线程池的拒绝策略)。
      为啥老板不上来直接招正式工?
      首先,招人(new thread)是不是得走流程,办手续,耗时耗力;
      其次,要是任务量降低了,养多出来的几个人没活干成本高(维护更多的线程的成本);
      最后,要辞退临时工也得各种走流程,各种赔偿,得不偿失。(超时清掉产能过剩的线程的成本)。
      正式工(线程)相对于计算机世界,是稀缺资源。国企的铁饭碗可不就是稀缺资源嘛,不到不得已,是不能泛滥的。


    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

悬赏问题

  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog
  • ¥15 Excel发现不可读取的内容
  • ¥15 关于#stm32#的问题:CANOpen的PDO同步传输问题