TimerTask类在java中只能运行一次

TimerTask类在java中只能运行一次,java,timer,timertask,Java,Timer,Timertask,我有一个类,每10秒运行一次,但当我多次执行它时,就会启动多个计时器。如果一个计时器已经在运行,我希望忽略其他计时器调用。我只希望在给定的时间点运行一个计时器。请帮忙 我的代码: import java.util.Timer; import java.util.TimerTask; public class Test1 extends TimerTask{ @Override public void run() { System.out.println("

我有一个类,每10秒运行一次,但当我多次执行它时,就会启动多个计时器。如果一个计时器已经在运行,我希望忽略其他计时器调用。我只希望在给定的时间点运行一个计时器。请帮忙

我的代码:

import java.util.Timer;
import java.util.TimerTask;
public class Test1 extends TimerTask{
    @Override
    public void run() {
            System.out.println("In run method");
        }

    public static void main(String args[]) {
        System.out.println("In main method");
        Timer timer= new Timer();
        timer.schedule(new Test1(), 10000,10000);
    }
}

如果你启动一个计时器,为什么不尝试设置布尔值为真,而只有当其他计时器为真或假时才让它启动,这取决于你如何设置它们

例如:

boolean checkTimer = false;

//Start a Timer and set checkTimer = true

if(checkTimer == true)
{
  //Start your other timers here
}
else
{
  //Write message that timer is already running
}
我希望第一个计时器始终运行。根本不应触发其他计时器调用

尝试使用只允许类的单个实例的单例模式

示例代码:

public class Test extends TimerTask {    
    private static Test instance = new Test();

    private Test() {}    
    public static Test getInstance() {
        return instance;
    }

    @Override
    public void run() {
        System.out.println("In run method");
    }
}
现在,如果您尝试在同一实例上启动另一个任务,将导致以下异常:

java.lang.IllegalStateException: Task already scheduled or cancelled
at java.util.Timer.sched(Unknown Source)
at java.util.Timer.schedule(Unknown Source)

计划好后,你在哪里停止计时器?我不想停止计时器。我希望第一个计时器始终运行。其他计时器调用根本不应该被触发。你能再解释一下你是如何运行多个任务的吗?记住一个计时器已经启动,这样其他尝试启动它的操作就可以被跳过的问题在哪里?如果不同的类启动了这个计时器,你必须创建一个所有类都可以调用的服务,这个服务跳过多个启动命令。谢谢大家。通过在servlet上下文侦听器中添加计时器类并在服务器启动时调用它,解决了这个问题。听起来不错。如果问题已解决,则关闭线程。参观