1

奇妙な問題が発生しました。

publish / stop-restart server をクリックしても「停止」しない ScheduledExecutorService.scheduleWithFixedDelay があります。

再公開すると、2 つのサービスが実行され、実行されている同じサービスの数は、公開をクリックする回数によって異なります。

サーバーを停止して起動しても、これは消えません。

Eclipse を閉じてから開いて停止する必要がありますが、サービスを初期化するクラスを編集した後にのみ発生することに気付きました。

コードを貼り付けることはできませんが、非常に単純です..シングルトンだけでサービスを保持しています

private final ScheduledExecutorService scheduler = 
       Executors.newScheduledThreadPool(1);

scheduler.scheduleAtFixedRate(new Runnable() {
                public void run() { system.out("hello" }
            }, 60 * 60, SECONDS);

問題が見つからないようです。誰か助けてください。

4

2 に答える 2

2

アプリケーションがアンデプロイされたら、スケジューラをシャットダウンすることになっています。これを行う簡単な方法は、ServletContextListenerの実装を宣言し、メソッドでスケジューラをシャットダウンすることcontextDestroyed()です。

于 2013-02-20T09:51:54.513 に答える
1

Executors.newScheduledThreadPool(1); 非デーモンワーカースレッドを作成し、スケジューラを明示的にシャットダウンしない限り、JVMがシャットダウンするのを防ぎます

scheduler.shutdown();

または、次のことを行うことができます

    ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1,
            new ThreadFactory() {
                public Thread newThread(Runnable r) {
                    Thread t = new Thread(r);
                    t.setDaemon(false);
                    return t;
                }

            });

この場合、ワーカースレッドはデーモンになり、プログラムの終了時にJVMの終了を妨げることはありません。

于 2013-02-20T10:12:34.227 に答える