Java 每秒重复一次循环
我有一个while循环,需要每秒重复一次,我不知道怎么做。我甚至从来没有使用过Java的时间模块或任何它被称为的东西 基本循环如下所示。谁能告诉我怎么做Java 每秒重复一次循环,java,while-loop,Java,While Loop,我有一个while循环,需要每秒重复一次,我不知道怎么做。我甚至从来没有使用过Java的时间模块或任何它被称为的东西 基本循环如下所示。谁能告诉我怎么做 while (!isOver()) { // do some work } 然后在另一个线程上启动,这样您的主线程将继续: new Thread(this::time).start(); 然后在另一个线程上启动,这样您的主线程将继续: new Thread(this::time).start(); 下面就可以了 while (!is
while (!isOver()) {
// do some work
}
然后在另一个线程上启动,这样您的主线程将继续:
new Thread(this::time).start();
然后在另一个线程上启动,这样您的主线程将继续:
new Thread(this::time).start();
下面就可以了
while (!isOver()) {
// do some work
try {
Thread.sleep(1000); /* 1000ms or 1 second */
} catch(InterruptedException e) {
// handle
}
}
下面就可以了
while (!isOver()) {
// do some work
try {
Thread.sleep(1000); /* 1000ms or 1 second */
} catch(InterruptedException e) {
// handle
}
}
也许这个代码片段可以帮助您。这是一个计划的timertask,每1秒重复一次run()方法。你可以在那里添加任何你想要的内容
TimerTask timerTask = new TimerTask()
{
public void run()
{
.... //Whatever inside your loop will be executed every second
}
};
....
Timer timer = new Timer();
timer.scheduleAtFixedRate(timerTask, 0, 1000);
希望有帮助!:) 也许这个代码片段可以帮助您。这是一个计划的timertask,每1秒重复一次run()方法。你可以在那里添加任何你想要的内容
TimerTask timerTask = new TimerTask()
{
public void run()
{
.... //Whatever inside your loop will be executed every second
}
};
....
Timer timer = new Timer();
timer.scheduleAtFixedRate(timerTask, 0, 1000);
希望有帮助!:) 我可能会使用一个线程,不过这可能并不完美,这取决于计算机的速度,以及循环每次迭代需要做多少工作 每个程序始终有一个线程。如果没有,那就不是一个过程。这是您的主线程,当您的程序启动时,它将进入“生命”,当您的程序终止时,它将终止。线程上有一个名为sleep(intms)的静态方法。这将暂停线程的处理,直到它的参数(ms)毫秒过去。因此Thread.sleep(1000)将暂停线程一秒钟,然后继续 每次暂停主线程一秒钟,如下所示:
while(!isOver()) {
// Do stuff
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// Deal with exception here
}
}
希望这有帮助。还有另一种创建线程的方法,但是对于这个目的来说,它太长太长了
PS您需要try/catch,因为有时系统会中断您的线程,这将导致异常。一个简单的e.printStackTrace()应该让您知道它何时发生,但是您可能希望在任何生产应用程序中更明确地处理它。我可能会使用一个线程,尽管这取决于您的计算机的速度,以及循环每次迭代需要做多少工作,它可能并不完美 每个程序始终有一个线程。如果没有,那就不是一个过程。这是您的主线程,当您的程序启动时,它将进入“生命”,当您的程序终止时,它将终止。线程上有一个名为sleep(intms)的静态方法。这将暂停线程的处理,直到它的参数(ms)毫秒过去。因此Thread.sleep(1000)将暂停线程一秒钟,然后继续 每次暂停主线程一秒钟,如下所示:
while(!isOver()) {
// Do stuff
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// Deal with exception here
}
}
希望这有帮助。还有另一种创建线程的方法,但是对于这个目的来说,它太长太长了
PS您需要try/catch,因为有时系统会中断您的线程,这将导致异常。一个简单的e.printStackTrace()应该会让您知道它何时发生,但是对于任何生产应用程序,您可能希望更明确地处理它。正如您所看到的,有很多方法可以完成您想要完成的任务。这是另一种方法。如果你的代码可以抛出异常,我倾向于避开计时器,因为它会阻止计时器再次运行。像这样的东西只需要少一些陷阱就行了
ScheduledExecutorService e = Executors.newSingleThreadScheduledExecutor();
e.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
}
}, 0, 1, TimeUnit.SECONDS);
}
或者,如果你想睡觉,你可以尝试:
while(!isOver) {
//DO WORK
try {
//Be careful if you are holding any Locks they will not be released
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
//Do nothing, just loop
}
}
正如你所看到的,有很多方法可以完成你想要做的事情。这是另一种方法。如果你的代码可以抛出异常,我倾向于避开计时器,因为它会阻止计时器再次运行。像这样的东西只需要少一些陷阱就行了
ScheduledExecutorService e = Executors.newSingleThreadScheduledExecutor();
e.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
}
}, 0, 1, TimeUnit.SECONDS);
}
或者,如果你想睡觉,你可以尝试:
while(!isOver) {
//DO WORK
try {
//Be careful if you are holding any Locks they will not be released
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
//Do nothing, just loop
}
}
@benjamin.d我应该把它放在循环体的末尾之前,还是放在while()语句中?放在循环体中。检查下面的答案。cmd的答案应该有效,但NetBeans没有拾取线程。@benjamin.d我应该把它放在循环体的末尾之前,还是放在循环体的while()语句中。检查下面的答案。cmd的答案应该有效,但NetBeans没有拾取线程。为什么让它休眠一分钟?谢谢,但Deitel兄弟还没有教我尝试。我从真实代码(等待一分钟)中剪切并粘贴了代码,我假设
this::time
是Java 8?当然,你还不想把它介绍给一个对Java不熟悉的人……嗯,我并不完全是新手,我只需要介绍一下计时器。我知道C++的尝试,但我还没有在java上达到它,我手头上有好几类,所以我可以像C++一样快地工作。为什么要让它睡一会呢?谢谢,但是DeTelBeles还没有教我尝试。我把代码从实际代码剪切并粘贴(等待一分钟)。我假设<代码>::时间<代码>是java 8?当然,你还不想把它介绍给一个对Java不熟悉的人……嗯,我并不完全是新手,我只需要介绍一下计时器。我知道C++的尝试,但我还没有在java上达到它,我手头上有好几门课,所以我可以像C++一样快。谢谢。我需要进口什么吗?NetBeans没有拾取线程。没有。你不需要导入任何东西,它说我需要一个Try语句。我会放一个进去看看怎么样。谢谢。我需要进口什么吗?NetBeans没有拾取线程。没有。你不需要导入任何东西,它说我需要一个Try语句。当Java最终支持闭包的时候,看起来像这样的解决方案会更常见。在Android中使用它们是很好的。我认为这是解决这类问题的好办法。但是您完全正确@JasonSperske.Following它可能是这样的:(new Timer()).scheduleAtFixedRate(()->{…/*将每秒执行一次*/},0,1000)代码>我迫不及待:)我真的必须仔细看看Groovy,它就像Java+其他语言的所有好东西。当Java最终支持闭包时,这种解决方案会更常见。这对我们很好