はい、ExecutorService
は、このタスクに最適です:時間を測定
ExecutorService exec = Executors.newFixedThreadPool(50);
スタートし、単にそれに10Kタスクを提出する:
for(int i = 0; i < 10000; ++i) {
exec(new SubmitToUrlTask());
}
は(ステートレスの同じインスタンスを使用することを検討してくださいまたはスレッドセーフ)SubmitToUrlTask
ではなく、反復ごとに新しいものを作成します。今の時間を測定
exec.shutdown();
if(!exec.awaitTermination(1, TimeUnit.MINUTE)) {
throw new IllegalStateException("Waiting for too long, captain!");
}
停止:executorが終了するのをあなたは待たなければなりません終わり
。 awaitTermination()
ブロックまですべてタスクは終了しましたが、与えられた時間(例では1分)を超えていません。
スレッドが完了すると、すぐに別のタスクが正しく実行されると思いますか?
はい、ExecutorService
は、一連のスレッドとタスクのキューです。スレッドに何もする必要がなければ、キューから最初のタスクが実行されます。
私は成功/失敗を記録しなければならないので、このスレッドを保存する必要があります(スレッドセーフでなければなりません)。
Callable<Boolean>
とFuture<Boolean>
を使用して結果を追跡できます。また、SubmitToUrlTask
という1つのインスタンスだけを使用している場合は、AtomicInteger
という2つの変数を使用して、成功と失敗の両方を追跡できます。個々の結果を追跡する必要がない場合は、これがはるかに簡単です。
これは、これらすべての機能を搭載した+ JMeterを使用したと考えられていますか? ab
コンソールユーティリティもあります。ここで
あなたがこれまでに何がありますか? – jtahlborn
「ロードシミュレータ」を意味するのではないですか?ベンチマークでは、通常、スピードの問題があります。「10k回ヒットし、いくつのリクエストが失敗したかを知る」のようなものです。ストレステストではなくベンチマークが必要な場合は、結果が異なるため、私は尋ねます。 – jefflunt
@jtahlborn私は実際に実行するタスク、すなわち私のURLにXMLファイルを投稿しています。 – codecompleting