1

一定の遅延後にメソッドを呼び出すことについて質問があります。

exampleFunction()約 10 秒の遅延後にJava メソッドを呼び出したい。オンラインで解決策を探したところ、ScheduledThreadPoolExecutor(). だから私はこれを使用しましたが、関数が10秒後に実行されると、スレッドから終了しません。スレッドを終了する方法はありますか? またはScheduledThreadPoolExecutor()、新しいスレッドを作成する代わりに、現在のスレッドで を実行できますか?

class Test {
     ...
     exampleFunction();
     ...

     public void exampleFunction() {
         ScheduledThreadPoolExecutor exec = new ScheduledThreadPoolExecutor(1);
         exec.schedule(new Runnable() {
             public void run() {
                 ...do something here...
             }
         }, 10, TimeUnit.SECONDS);
     }

}

exampleFunction が 10 秒の遅延後に実行された後、このスレッドを終了する方法はありますか? またはScheduledThreadPoolExecutor、新しいスレッドを作成する代わりに、現在のスレッドを使用することはできますか?

または、この問題にアプローチできる別の方法はありますか? exampleFunction()新しいスレッドを作成する代わりに、現在のスレッドで 10 秒後に実行できるようにしたいと考えています。

編集:スレッドの問題ではないかもしれません。私はまだ問題を理解しようとしています。皆さんの提案とアドバイスに感謝します。

編集: exampleFunction() に引数を渡してから、public void run() 内で使用できますか?

4

3 に答える 3

1

あなたの問題は、ジョブを送信した後にエグゼキューターをシャットダウンしていないことにあると思います。

exec.schedule(...);
exec.shutdown();

送信されたジョブは引き続き実行されますが、最後のジョブを送信した後にサービスをシャットダウンする必要があります。

于 2013-04-09T18:49:59.947 に答える
0

Thread.sleep単に現在のスレッドブロックを作成したい場合に使用できます。プールされたエグゼキュータを使用する場合は、(新しい) スレッドごとに 1 つではなく、プールされたエグゼキュータとして使用してください。スレッドから「終了」するには、実行をrun. Swing を使用している場合は、EDT を使用します。

于 2013-04-09T18:49:46.443 に答える