如何在java中定期执行操作?

Sar*_*ang 5 java loops timer

有没有办法创建一个循环,可以每3秒执行一次任务而不使用睡眠功能

例如:

try {
    while (true) {
        System.out.println(new Date());
        Thread.sleep(5 * 1000);
    }
} catch (InterruptedException e) {
    e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)

但是使用睡眠功能时的问题是,它只是冻结了程序.

这个循环的主要思想是与mysql数据库(在线)进行同步.

fmo*_*dos 7

使用 java.util.TimerTask

java.util.Timer t = new java.util.Timer();
t.schedule(new TimerTask() {

            @Override
            public void run() {
                System.out.println("This will run every 5 seconds");

            }
        }, 5000, 5000);
Run Code Online (Sandbox Code Playgroud)

如果您使用的是GUI,则可以使用以下javax.swing.Timer示例:

int delay = 5000; //milliseconds
  ActionListener taskPerformer = new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
          System.out.println("This will run every 5 seconds");
      }
  };
  new javax.swing.Timer(delay, taskPerformer).start();
Run Code Online (Sandbox Code Playgroud)

约之间的差别的一些信息java.util.Timerjava.swing.Timer: http://docs.oracle.com/javase/7/docs/api/javax/swing/Timer.html

它和javax.swing.Timer都提供相同的基本功能,但java.util.Timer更通用,并且具有更多功能.javax.swing.Timer有两个功能,可以使它更容易使用GUI.首先,它的事件处理隐喻对于GUI程序员来说是熟悉的,并且可以使事件调度线程的处理更简单一些.其次,它的自动线程共享意味着您不必采取特殊步骤来避免产生太多线程.相反,您的计时器使用相同的线程来使光标闪烁,出现工具提示,等等.