访问使用java.util.Timer调度的正在运行的任务

访问使用java.util.Timer调度的正在运行的任务,java,timer,task,Java,Timer,Task,我正在从事一个Java项目,在该项目中,我创建了一个类似以下内容的类(节略版): 公共类守护程序{ 专用静态计时器[]timerarray=null; 私有静态守护进程实例=null; 受保护的守护进程(){ ArrayList timers=新的ArrayList(); 定时器t=新定时器(“我的应用程序”); t、 附表(新工人(),100003000); 计时器。添加(t); //... timerarray=timers.toArray(新计时器[]{}); } 公共静态守护程序getI

我正在从事一个Java项目,在该项目中,我创建了一个类似以下内容的类(节略版):

公共类守护程序{
专用静态计时器[]timerarray=null;
私有静态守护进程实例=null;
受保护的守护进程(){
ArrayList timers=新的ArrayList();
定时器t=新定时器(“我的应用程序”);
t、 附表(新工人(),100003000);
计时器。添加(t);
//...
timerarray=timers.toArray(新计时器[]{});
}
公共静态守护程序getInstance(){
如果(instance==null)instance=new Daemon();
返回实例;
}
public SomeClass从worker获取somevalues(int i){
if(timerarray==null | | i>=timerarray.length)返回null;
/* 
***如何在此处访问计时器阵列中的工作者实例**
*/
返回值;
}
/////////////////////////////////////////////
私有类工作程序扩展TimerTask{
公职人员(){}
公开募捐{
//做些工作
}
公共SomeReturnClass someMethod(SomeType someParameter){
//
归还某物;
}
}
/////////////////////////////////////////////
}
我启动这个类,例如通过调用
daemon.getInstance()

但是,我希望有一些方法来访问正在运行的任务对象的方法(例如,用于监视对象的状态)。 Java类
Java.util.Timer
似乎没有提供访问正在运行的对象的方法,它只是调度扩展
TimerTask
的对象实例

是否有方法访问
计时器中实例化的“正在运行”对象?我是否必须使用适当的方法对
Timer
类进行子类化,才能以某种方式访问实例(某种程度上,这“感觉”很奇怪)? 我想以前可能有人做过这件事。。。我在哪里可以找到这种“程序”的例子


提前感谢您的反馈。

不要使用
计时器。这些实现要好得多,并通过一些额外的工作提供您想要的功能。有关避免在守护进程构造函数中使用
计时器的原因,请参见,您可以将
Worker
的实例收集到某种集合中,并为该集合添加一个getter。这需要增加对内部
工作者
类的访问级别,并确保
工作者
的方法是线程安全的


另一件事:为什么要为每个作业创建一个新的
计时器?如果您的作业完成得很快,而且没有太多的作业,请考虑将它们全部注册到单个<代码>定时器< /代码>中。另一种方法是,使用,其中有一个大小由您选择的线程池。

我为每个作业创建一个新的计时器,因为每个作业下面都有很多事情要做。我省略了我认为与我的问题无关的内容。
public class Daemon {
  private static Timer[] timerarray=null;
  private static Daemon instance=null;

  protected Daemon() {
    ArrayList<Timer> timers = new ArrayList<Timer>();
    Timer t = new Timer("My application");
    t.schedule(new Worker(), 10000,30000);
    timers.add(t);
    //...
    timerarray = timers.toArray(new Timer[]{});
  }
  public static Daemon getInstance() { 
    if(instance==null) instance=new Daemon(); 
    return instance;
  }
  public SomeClass getSomeValueFromWorker(int i) {
    if(timerarray==null || i>=timerarray.length) return null;
    /* 
     * **HOW TO ACCESS THE Worker INSTANCE IN THE Timer ARRAY HERE!? **
     */
    return theValue;
  }

  /////////////////////////////////////////////
  private class Worker extends TimerTask {
    public Worker() {}
    public void run() {
      // do some work
    }
    public SomeReturnClass someMethod(SomeType someParameter) {
      //
      return something;
    }
  }
  /////////////////////////////////////////////
}