Я работаю над проектом Java, где я создал класс, который выглядит следующим образом (сокращенный вариант):Доступ к выполняемой задачи по расписанию с java.util.Timer
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;
}
}
/////////////////////////////////////////////
}
Я начинаю этот класс, например, путем вызова daemon.getInstance();
.
Однако, я хотел бы иметь некоторый способ доступа к методам запущенных объектов задачи (например, для контроля состояния объектов). Класс Java java.util.Timer
, похоже, не предоставляет средства для доступа к запущенному объекту, он просто планирует экземпляр объекта, расширяющий TimerTask
.
Есть ли способы доступа к «запущенному» объекту, созданному в пределах Timer
? Должен ли я подклассифицировать класс Timer
с помощью соответствующих методов, чтобы каким-то образом получить доступ к экземпляру (это «кажется» странным, каким-то образом)? Я полагаю, что кто-то, возможно, сделал это раньше ... Где я могу найти примеры этой «процедуры»?
Заранее благодарю вас за отзыв.
Я создаю новый таймер для каждого задания, потому что каждая работа выполняет множество вещей внизу. Я опустил то, что, по моему мнению, не имело значения для моего вопроса. – jbatista