Java 使用一个计时器处理多个TimerTask
有了一个Java 使用一个计时器处理多个TimerTask,java,timer,timertask,Java,Timer,Timertask,有了一个TimerTask,一切看起来都很简单,工作正常。 但我不能在一个计时器内处理不同的“TimerTask”。 我尝试将TimerTask对象添加到构造函数中,但在将新的TimerTask(RemindTask1)对象作为参数(内部类的实例)传递时出现编译错误 以下是它如何处理一项任务: public class MyTimer { Timer timer; public MyTimer(long time) { timer = new Timer();
TimerTask
,一切看起来都很简单,工作正常。但我不能在一个计时器内处理不同的“TimerTask”。 我尝试将TimerTask对象添加到构造函数中,但在将新的TimerTask(RemindTask1)对象作为参数(内部类的实例)传递时出现编译错误 以下是它如何处理一项任务:
public class MyTimer {
Timer timer;
public MyTimer(long time) {
timer = new Timer();
timer.schedule(new RemindTask(), time);
}
class RemindTask extends TimerTask {
@Override
public void run() {
/// ...
timer.cancel();
}
}
public static void main(String[] args) {
/// ...
MyTimer myTimer = new MyTimer(5000);
/// ...
}
}
但我完全无法理解如何创建并运行多个任务
public class MyTimer {
Timer timer;
public MyTimer(TimerTask tt, long time) {
timer = new Timer();
timer.schedule(tt, time);
}
class RemindTask1 extends TimerTask {
@Override
public void run() {
/// ...
timer.cancel();
}
}
class RemindTask2 extends TimerTask {
@Override
public void run() {
/// ...
timer.cancel();
}
}
public static void main(String[] args) {
/// ...
MyTimer myTimer = new MyTimer(new RemindTask2(), 5000);
/// ...
}
}
但这不起作用,我也不知道出了什么问题。
当我将new rementtask2()作为参数传递时,出现编译错误。我假设“不工作”是指编译器不允许您从静态上下文(main
方法)创建内部类rementtask2
的实例
通常有两种方法来处理这个问题
MyTimer
实例为您创建其内部类实例。这实际上不是一个选项,因为在构造MyTimer
之前,需要存在内部类实例static
关键字,将内部类更改为嵌套类。这是你的选择与其在构造函数中完成所有工作,不如在MyTimer类中创建一个公共方法,并将任务的调度移到该方法的主体中。就像构造函数一样,方法可以接受TimerTask参数。我重新编写了你问题的一些部分,并给了你一个更具描述性的标题(搜索你问题的人会用到这个标题)。现在还不完全清楚出了什么问题,所以如果你在问题主体中添加更多关于你想做什么的信息,可能会更好。谢谢你的建议谢谢。非常简单的解决方案,效果很好。还有一个问题是如何在此处取消计时器任务,而不是计时器本身?除非您想确保任务只执行一次,否则不需要在此处取消计时器。当
run()
方法完成执行时,任务结束,因此不需要“取消”任务本身。此外,当MyTimer
实例仅用于运行该任务时,仅取消该任务没有意义。
MyTimer myTimer;
// initialize myTimer
TimerTask task = myTimer.new RemindTask2();
static class RemindTask2 extends TimerTask {
//...
}