java - 定时器任务和线程以及内部类

标签 java multithreading timertask

<分区>

大家好。我开发了以下代码。目的是:在屏幕上每隔 500 毫秒打印一次当前时间。这应该发生在线程内。我的代码不起作用,我不知道为什么。

====================================================================

import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
public class MyTimer implements Runnable 
     {
      public class PrintingTask extends TimerTask
      {
           public void run()
           {
                Date CurrentTime = new Date() ; 
                System.out.println(CurrentTime) ; 
            }
       } 
      public void run()
      {
         Timer timer = new  Timer() ; 
         PrintingTask Task1 = new PrintingTask() ; 
         timer.schedule(Task1,500);
       }
      }
  //====================End of the thread : MyTimer========================
    public class Test {
       public static void main(String[] args) throws InterruptedException {
       Thread TimerOfScreen = new Thread(new MyTimer());
       TimerOfScreen.start(); 
                      }

  ======================End of the test class=====================

日期只打印一次,不是每 500 毫秒打印一次。任何机构都可以修复此代码,“逻辑上没有大的变化”?

最佳答案

您正在使用只运行一次任务的 Timer.schedule() 版本:Timer.schedule(TimerTask, long) , 在指定的延迟之后。

您需要指定实际重复任务的版本之一:Timer.schedule(TimerTask, long, long)Timer.scheduleAtFixedRate(TimerTask, long, long) .在这两个中,第三个参数决定了每次执行之间将经过多少时间。不同之处在于 scheduleAtFixedRate 将尝试将每个任务调用的开始时间保持在与开始时间几乎恒定的时间段,而 schedule 将在结束时间之间保持相当恒定的间隔一次执行和另一次执行的开始。

关于java - 定时器任务和线程以及内部类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20437500/

相关文章:

java - 如何在终端中杀死这个 tomcat 进程?

c - 共享一个缓冲区——线程安全

java - Runnable 或 Callable 的大规模任务替代模式

c# - 无法从另一个线程访问对象

java - 为什么 transient 变量的状态存储在单例对象中?

java - 二叉树路径求和逻辑

java - Java 中的 64 位媒体框架

java - 重用Java定时器timertask

java - 在JAVA循环中每x秒使用不同参数执行一个方法

java - 当我的类已经扩展了一个类时,如何实现 TimerTask?