私はparallelStream
を使用する場合は、時々クライアント側で検索されたリストには、すべての要素を返さないJersey rest api
AsyncResponseとJava 8の並列ストリームの問題
@POST
@Path("test")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public void test(final List<String> requests, @Suspended final AsyncResponse asyncResponse) {
List<String> resplist = new ArrayList();
requests.parallelStream().forEach(req -> {
String resp = //some process to get (Always return string)
resplist.add(resp);
});
asyncResponse.resume(resplist);
}
で春のブートを使用しています。
は、私はそれが29を返しますが、いつかそれは30を返しません(要求は常に同じである)
しかし、私は唯一のforEach
で、通常のストリームを使用する場合、それは常に私の30個の要素を返す30を渡すと言うことができます。
これは何らかのバグですか?ユージンことで、これを答えとして、私は残りのAPIで
UPDATE
をparallelStreamを使用することはできません並列ストリームを使用するときに複数のスレッドが
ソリューションをスレッドセーフされていないのArrayListにレコードを追加したため問題でした 同期収集を使用する
Collection<String> resplist = Collections.synchronizedCollection(new ArrayList<String>());
経由で収集する必要があります。答えをありがとう。 – Makky