Java で一定間隔の操作を行う場合はいつでも、ScheduledExecutorServiceを調査する必要があります。あなたの場合、次のようなものです:
private static final ScheduledExecutorService SERVICE = Executors.newScheduledThreadPool(1,
new ThreadFactory() {
public Thread newThread(Runnable r) {
Thread t = new Thread("Tick Thread", r);
t.setDaemon(true);
return t;
}
});
private static final AtomicReference<Controller> CONTROLLER = new AtomicReference<>();
public static final void setController(Controller c) {
CONTROLLER.compareAndSet(null, c);
}
static {
Runnable task = new Runnable() {
public void run() {
//do something each second....
// call the 'update()' method:
Controller c = CONTROLLER.get();
if (c != null) {
c.update();
}
}
}
// delay 1 second, repeat each second.
service.scheduleAtFixedRate(task, 1, 1, TimeUnit.SECONDS);
}
それを取得して、クラスの静的初期化子に入れると、クラスがロードされた瞬間にシステムが起動します.... ExecutorService のスレッドをデーモンスレッドにしたいでしょう...そのため、カスタム スレッド ファクトリが必要です.....
上記のコードはすぐに開始され、Controller があればそれを毎秒更新します。
c コントローラーを作成した瞬間に、静的メソッドを使用して値を設定できます。