2017-02-14 3 views
0

私は複数のget snmpを送信するためのスレッドプールを実装しています。 Callableオブジェクトを使用しています:ScheduledExecutorServiceオブジェクトで実行スレッドを開始するために遅延を追加します。

final ScheduledExecutorService executor = Executors.newScheduledThreadPool(size); 
final Map<String, Future< >> map = new HashMap<String, Future< >>(); 
for (final String key : groupMap.keySet()) { 
    final ObjectCallable objectCallable = new ObjectCallable(par1, par2, par3); 
    try { 
     Thread.sleep(50); 
    } catch (final InterruptedException e) { 
      LOGGER.error("Error delay in the submit Callable" + e.getMessage()); 
      } 
    final Future< > result = executor.submit(objectCallable); 
} 

スレッド間に実行遅延を追加する必要があります。私は提出する前に睡眠を追加しました、それは正しいですか?誰か他の方法を知っていますか?

+0

"スレッド間に実行遅延を追加する必要があります。"あなたのニーズをより正確に説明できますか? – davidxxx

+0

私はすべてのスレッドを同時に起動するのではなく、少し遅れて起動します。例T1開始時刻0、t2開始時刻0 +遅延、..... – ottis79

答えて

0

scheduleScheduledExecutorServiceの方法(およびその過負荷)が正確のように、あなたが探しているものを定義するのに思わdelayパラメータを受け入れる:

遅延 - 実行

を遅らせるために、今からの時間

あなたの代わりに、実行中のCallableを送信する前に、現在実行中のスレッドで人工的にスリープ状態にすることです(これはExecutorService#submitを呼び出すことによって実行されます。方法はScheduledExecutorService)。

+0

こんにちはMena、あなたの返事をありがとう。 ScheduledExecutorService広告を使用して、各スレッドの実行を開始する時間が異なることは可能ですか? – ottis79

+0

@ ottis79それぞれの 'Callable'を' delay'で 'schedule'して正確にそれを行うとしたら、そうです。あなたの説明に感謝します。 – Mena

+0

私はそれぞれのスレッドごとに遅延を追加します。 – ottis79

関連する問題