1

これは言葉遣いの悪いタイトルかもしれませんが、アプリケーションの最初からデータと統計を収集しようとしています。私は JavaFX を使用しており、すべてのデータと処理を処理するモデル クラスがあります。

私が欲しいのは、アプリが起動した瞬間から、そのモデル クラスがデータ (ランタイム、スレッド数、メモリ使用量など) の収集を開始することです。しかし、これらの値を毎秒更新し続けることも望んでいます。つまり、ある種の ScheduledExecutorThread などで実行する必要があります。

このプログラムの最初から、モデル クラスが "update()" 関数を毎秒実行するようにするにはどうすればよいですか?

4

1 に答える 1

1

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 コントローラーを作成した瞬間に、静的メソッドを使用して値を設定できます。

于 2014-10-01T19:44:36.753 に答える