J'utilise botte de printemps avec Jersey rest api
AsyncResponse et Java 8 question de flux parallèle
@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);
}
Si je parallelStream
parfois la liste qui est récupéré sur le côté client ne retourne pas tous les éléments.
Disons que je passe 30 retourne 29, mais parfois il fait revenir 30 (demande est toujours le même)
Mais si j'utilise cours d'eau normale avec forEach
seulement, il me renvoie toujours 30 éléments.
Est-ce une sorte de bug? Puis-je pas utiliser parallelStream dans le repos api
MISE À JOUR
Comme répondu par Eugene ce fut la question parce que lors de l'utilisation flux parallèle plusieurs threads ont été l'ajout enregistrement dans arraylist qui ne ThreadSafe
solution Utilisez collection Synch
Collection<String> resplist = Collections.synchronizedCollection(new ArrayList<String>());
Vous êtes sur place. Merci d'avoir répondu. – Makky