Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 每秒重复一次循环_Java_While Loop - Fatal编程技术网

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循环,需要每秒重复一次,我不知道怎么做。我甚至从来没有使用过Java的时间模块或任何它被称为的东西

基本循环如下所示。谁能告诉我怎么做

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最终支持闭包时,这种解决方案会更常见。这对我们很好