2012-01-06 7 views
5

私はスリープメソッドを使用してスレッドを遅延させる従来の方法を知っています。私の質問は、私は次のようしているはずです:Javaスレッド:スレッド間のExecutorService遅延

ExecutorService threadExecutor = Executors.newFixedThreadPool(5); 

睡眠法を使用せずに、各スレッド間の遅延を持つようにExecutorServiceのクラスを使用して、と言う方法はありますか?私は、この目的のためにExecutorServiceクラスにメソッドがあることを意味しますか?

+2

あなたは「各スレッド間の遅延」でWhjatを意味していますを行うことができますを意味していますか?あなたは提出された各タスクの排除の間を遅らせますか? – skaffman

+0

遅延の理由を挙げることができますか?ほとんどの場合、Runnables/Futuresに何らかのブロッキングを使用させることになります。さらに、sleep()を使用するのに適していない機能は何ですか? –

+0

クラスのドキュメントには何も記載されていません。 http://docs.oracle.com/javase/6/docs/api/java/util/concurrent/ExecutorService.html – Max

答えて

9

あなたは

ScheduledExecutorService service = Executors.newScheduledThreadPool(5); 

service.scheduleAtFixedRate(task, initialDelay, period, TimeUnit.MILLISECONDS); 

のようなもの、あなたが離れて3つのタスク、10秒をしたい場合は、

service.execute(task1); 
service.schedule(task2, 10, TimeUnit.SECONDS); 
service.schedule(task3, 20, TimeUnit.SECONDS); 
+0

私は上記が特定のタスクに周期的な遅延を引き起こすと思います。つまり、同じタスクが定期的に実行されます。私が望むのは、タスク1(実行可能なobj1)が最初に実行され、タスク2(実行可能なobj2)が実行可能なobj1が実行された後10秒後に実行を開始するなどのタスク間の遅延です。私はこれがExecutorServiceか何らかの並べ替えを使って行うことができるかどうか疑問に思っています。 – yapkm01

+0

あなたのコメントに基づいて更新しました。 –

関連する問題