0

アプリケーション サーバーでwhile (true)のような動作を実現するにはどうすればよいですか?
永続データを数秒ごとに変更する必要がある場合、サイクルごとにプロシージャ A、B、C を呼び出す必要があります。

public class Runner
{    
    List values;

    public void repeat() 
    {
        while (true)
        {
            changeSomeDataA();
            changeSomeDataB();
            changeSomeDataC();
        }
    }
}
4

3 に答える 3

0

Java EE 仕様は、特定の期間にビジネス ロジックを実行するのに役立つ EJB タイマーを作成する可能性を提供します。

各 EJB バージョン (2.1、3.0、3.1) には、このコンポーネントを実装できる形式の変更が含まれているため、Java バージョンに従ってサンプル コードを検索する必要があります。

于 2013-06-19T03:08:57.583 に答える
-2

提供された情報を使用して、1 つの解決策は、メソッドを再度呼び出す前に、たとえば 5 秒間スリープするスレッドを開始することです。

// init (e.g. with servlet init())
Runner r = new Runner();
Thread t = new Thread(r);
t.start();

// and later (e.g. with servlet destroy())
r.stopRunning();
t.interrupt();
t.join();

そして、ランナーを少し更新して、スレッド内で実行できるようにするだけです。

public class Runner implements Runnable
{    
    List values;
    boolean running = true;

    public void run() 
    {
        while (running)
        {
            changeSomeDataA();
            changeSomeDataB();
            changeSomeDataC();

            try {
                Thread.sleep(5000);
            } catch(InterruptedException e) {
                // we do not really need to react here, do we?
            }
        }
    }
}

誤ってガベージ コレクションされないオブジェクト (サーブレット インスタンスなど) にランナーとスレッドへの参照を格納する必要があることに注意してください。もちろん丁寧に梱包してください。

于 2013-06-18T21:18:01.840 に答える