2016-05-25 7 views
1

ルック:executor.shutdownの使用()

 public void pinger() 
    { 
     ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(1); 
     executor.scheduleAtFixedRate(runnable, start, rate, TimeUnit.SECONDS); 
     executor.shutdown(); 
    } 

は、この場合にはshutdownコマンドを書くの任意の使用はありますか?異なるクライアントは独自の実行可能オブジェクトを作成し、この関数を呼び出します。

+1

はなぜ率を固定した後、すぐにシャットダウンしますか? –

+1

この方法の[Documentation](https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ScheduledThreadPoolExecutor.html#shutdown())を参照してください。スレッド/実行可能ファイルごとに新しいスレッドプールを作成することはお勧めできません。高価なリソースの使用を招く可能性があります。一度に1000スレッドをスポンサーすることを考えてください。スレッドプールは、この場合は10スレッド(利用可能なリソースごとに)のプールで1回だけで、すべての要求に対してグローバルに使用する必要があります。 – Braj

答えて

0

エグゼキュータをシャットダウンすると、新しいタスクは受け入れられません。 pingerメソッドの中に新しいものを作成するので、すべてのタスクに独自のexecutorがあります。あなたが書いているシャットダウンは、コアント・タスクが終了するとリソースを解放するだけです。

+0

新しいランナブルオブジェクトを持つ新しいクライアントがpinger()メソッドを呼び出すと、以前のクライアントの実行がシャットダウンされたという事実を考慮して、問題を作成しますか? –

+0

いいえ、新しい実行可能ファイル用に新しい実行プログラムを作成するためです。だから新しい仕事は前の仕事とは一線を画しています。 – Hooch

0

いくつかの注意:あなたは、各クライアント要求のためのExecutorを作成するべきではありません

  1. クライアント要求の側面をExecutorを作成し、あなたがシャットダウンした後、Executorにexecutorを新しいタスクを受け入れるべきではないと判断した場合にはExecutor
  2. にタスクを提出します。 Executorをシャットダウンする正しい方法は、ポストの下で説明します

How to forcefully shutdown java ExecutorService

関連する問題