【问题标题】:java TimerTask examplejava TimerTask 示例
【发布时间】:2018-11-15 13:11:35
【问题描述】:

我需要定期执行一个线程。我在我的 java 程序中使用 timerTask 方法

public class StudentDTO  extends  TimerTask{
@Override
public void run(){  
    System.out.println("hi");
}
        public static void main(String[] args){ 

    StudentDTO t1=new StudentDTO();  
    Timer timer = new Timer(true);
    timer.scheduleAtFixedRate(t1, 0, 10000);
    System.out.println("start");

     try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

}

}

当我执行这段代码时,我得到了类似的答案

开始 你好 嗨

程序将被终止。 我必须每 10 秒运行一个线程。请给我一个解决方案

【问题讨论】:

  • Timer timer = new Timer(true); - 为什么是真的?
  • 我从谷歌得到了那个代码
  • 阅读我的答案以了解为什么您应该尝试理解您找到的代码 :-)
  • 可以用这个TimerTask定时调用普通方法吗?
  • 不是任意的method 您可以使用它在特定时间调用任务。我实际上建议您查看quartz-scheduler.org

标签: java timertask


【解决方案1】:

当唯一运行的线程都是守护线程时,Java 虚拟机退出。

所以改成

 Timer timer = new Timer();

这将创建一个用户线程

【讨论】:

  • 可以用这个TimerTask定时调用普通方法吗?
  • 看我上面的评论
【解决方案2】:

new Timer(true) 更改为 new Timer() 否则它是一个守护线程并且应用程序在 main 退出时终止

【讨论】:

  • 可以用这个TimerTask定时调用普通方法吗?
【解决方案3】:

有两种方法可以让程序每 10 秒运行一次。

  1. 定时器 timer=new Timer();
  2. 通过更改线程休眠的时间。它应该大于或等于您要安排任务的时间间隔。例如,

            try {
                Thread.sleep(12000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
    

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-23
    • 1970-01-01
    • 1970-01-01
    • 2015-03-02
    相关资源
    最近更新 更多