0

私はAWSの1コアマシンに限られていますが、すべてのHTTPリクエストを完了してその結果を確認する時間を測定した後、2つは一緒にフェッチするために残りの50個の要求(約2分)としてのデータ。Java並列ネットワークリクエストとリストの更新

私はコードを膨らませたくありませんが、私は並列性を知っており、非同期性はこのタスクの実行時間を大幅に短縮する可能性があります。 2つの大きなリクエストを自分のスレッドで起動して、他のリクエストが実行されている間に外出できるようにしたいのですが、これらのHTTPリクエストの結果を現在リストに格納しています。

データが事前に初期化されている限り、リストの異なる(保証された)要素に同時にアクセスできますか?私は並行リストと並列リストを見てきましたが、一方はパラレルではなく、もう一方はすべての変更時にリスト全体を再割り当てするので、どちらも特に問題ありません。

この場合、私は何ができますか?

+0

独自のスレッドを作成して、リクエストリストを別のスレッドにディスパッチできますか? – Chuck

+0

私はそれを試み、非常に興味深い結果を得ました。私は3つのデータセットを持っています。スレッド[]チーム=新しいスレッド[dataSets.length]を設定すると、 (I = 0; I patrickjp93

+0

リスト内のエントリを結果配列に設定するためのインデックスは、スレッド内でも正しいですが、一貫して失敗します。結果がコミットされるためにスレッドが死んでいく過程で何らかの遅延が起きていますか? – patrickjp93

答えて

0

Javaには並行リストのようなものはありません。私はあなたが(newSetFromMapを使用して)同時ハッシュセットを指していると仮定しており、あなたの "パラレルリスト"はCopyOnWriteArrayListを指しています。

前者のオプションを使用して、更新データを保存できます。

データを非同期的に更新する問題を解決するには、ワーカースレッド用のスレッドセーフではないコレクションを使用して、スレッドセーフコレクションを完了した時点でそれらをすべて一度にプッシュするだけです。すべてのリクエストを集約するために使用します。

だから、のようなもの:あなたはあなたの応答データが特定の方法で注文する場合は一緒になるために、このような要求1からの応答すべてを持つものとして、様々なシンクロナイザを使用する場合があります

各ワーカーからの要求を転送する必要がある場合は、スレッドセーフ転送またはシングルトンコレクションを使用してください。

関連する問題