提供された情報を使用して、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?
}
}
}
}
誤ってガベージ コレクションされないオブジェクト (サーブレット インスタンスなど) にランナーとスレッドへの参照を格納する必要があることに注意してください。もちろん丁寧に梱包してください。