当前位置: 首页 > 知识库问答 >
问题:

你能使用无限循环来使用java连续运行程序吗

史淳
2023-03-14

我有一个我研究过的问题,但我没有找到任何令人信服的答案。如果您想每2小时左右循环运行一个程序,当然,我知道任何人都可以使用windows调度程序或类似的东西,是否会在无限循环中运行程序并每2小时左右使用“继续”语句来防止它中断(StackOverflow)?

共有2个答案

彭衡
2023-03-14

理论上你可以这么做。但有多种方法可以做得更好。首先,即使你想进行无限循环,也要在一个单独的线程中进行。但最简单和标准的方法是编写一些实现Runnable接口的类,将“do something”代码放入其方法run(),并使用ScheduledExecutorService每2小时安排一次任务。您可以从Executors获得的ScheduledExecutorService。newScheduledThreadPool(int corePoolSize)方法。另一方面,有一个开源库(由我编写)可以简化睡眠延迟代码,而不是

try {
    // do something
    Thread.sleep(TimeUnit.HOURS.toMillis(2));
} catch Exception e {
    e.printStackTrace();
}

你可以这样写:

private static final TimeInterval TWO_HOURS = new TimeInterval(2L, TimeUnit.HOURS);
...
//Do something
TimeUtils.sleepFor(TWO_HOURS);

异常在内部处理。下面是TimeUtils类的Javadoc。该库称为MgntUtils,可以作为Mavien工件或来自Github(包括源代码和Javadoc)

邢烨烨
2023-03-14

像这样简单/原始的东西会让你开始:

java prettyprint-override">public static void main(String[] args) 
    while (true) {
        try {
            // do something
            Thread.sleep(TimeUnit.HOURS.toMillis(2));
        } catch Exception e {
            e.printStackTrace();
        }
    }
}
 类似资料:
  • 问题内容: 我正在尝试新的React Hooks的API,它似乎一直在无限循环中运行!我只希望回调运行一次。这是我的代码供参考: 单击“运行代码段”,以查看将“ Run useEffect”字符串无限打印到控制台。 问题答案: 发生这种情况是因为在每次渲染后都会触发,这是在这种情况下无状态功能组件的调用。当你做一个从返回的呼叫中,阵营将再次呈现该组件,并再次运行。这将导致无限循环: →交通→交通→

  • 问题内容: 我正在使用以下代码: 但是,如果我输入“ w”,它将告诉我“您输入的输入无效。请重试。” 然后它将进入无限循环,显示文本“指定0到5之间的整数:您输入的输入无效。请重试。” 为什么会这样呢?该程序不是应该等待用户输入并在每次到达该语句时按Enter键: 问题答案: 在最后一个块中,您需要清除“ w”或来自扫描仪的其他无效输入。您可以通过调用Scanner并忽略其返回值来丢弃该无效输入来

  • 我正在尝试新的React Hooks的API,它似乎一直在无限循环中运行!我只希望中的回调运行一次。下面是我的代码供参考:

  • 问题内容: 我一直在使用React 16.7-alpha中的新钩子系统,并且当我正在处理的状态是对象或数组时陷入useEffect的无限循环中。 首先,我使用useState并使用一个空对象启动它,如下所示: 然后,在useEffect中,我再次使用setObj将其设置为空对象。作为第二个参数,我传递了[obj],希望如果对象的 内容 没有更改,它也不会更新。但是它一直在更新。我猜是因为不管内容如

  • 我想让用户输入一个String和四个整数值,如果用户输入的类型不匹配,我想让程序继续要求用户输入整数值,为什么代码会一直循环,如果用户插入了错误的类型,永远不会等待用户输入?

  • 问题内容: 当我在 while循环中 使用 try和catch 块时,我的程序有一个无限 循环 。 当我输入一个整数时,它运行良好并要求另一个输入,但是当我输入一个字符时,它将进入无穷循环。为什么会这样呢? 问题答案: 遇到无效输入时,由于nextInt()不使用无效令牌,因此程序进入无限循环。因此,导致该异常的任何令牌都将保留在该位置,并在下次尝试使用nextInt()时继续引发异常。 可以通过