TimerTask类必须在Java中仅运行一次

问题描述 投票:1回答:2

我有一个每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);
    }
}
java timer timertask
2个回答
2
投票

我希望第一计时器一直运行。完全不应该触发其他计时器调用。

尝试使用Singleton patten,该类仅允许该类的单个实例。

示例代码:

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)

1
投票

为什么不启动计时器就尝试将布尔值设置为true,而仅当其他计时器为true或false时才让其他计时器启动,这取决于您如何设置它们]

类似:

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
}
© www.soinside.com 2019 - 2024. All rights reserved.