J'ai lu dans un autre article qu'après une recherche on a trouvé que le fonctionnement du terminal anyMatch fonctionne de telle sorte que chaque thread (opérant sur un sous-flux) vérifie périodiquement si d'autres threads ont trouvé un résultat et si c'est le cas, tous les autres threads sont arrêtés.Comportement parallèle du flux Java pour allMatch, noneMatch, filter et map
je suppose, mais se demande si quelqu'un pouvait vérifier si noneMatch
et allMatch
fonctionnent également de cette façon, si lors de l'exécution noneMatch
, un thread trouve une correspondance réelle, l'opération peut retourner false. Donc tous les autres threads vérifient-ils périodiquement cela de la même manière que pour anyMatch
? De même, est-ce que l'inverse s'applique à allMatch
?
En outre, je me suis demandé s'il y avait une différence lors de l'exécution des opérations filter
et map
en parallèle pour savoir si elles sont exécutées sur un flux ordonné ou non. Sur un flux ordonné, je suppose que l'avantage le plus logique est simplement que les différents threads peuvent traiter chaque sous-flux créé, puis les fusionner tous ensemble dans le même ordre. Pour un flux non ordonné, cela présente-t-il des avantages pour de telles opérations que j'ai du mal à imaginer?
C'est une réponse fantastique - merci beaucoup! Donc, pour clarifier, allMatch et noneMatch en parallèle auront des threads pour chaque contrôle de sous-flux si d'autres threads ont été capables de définir un résultat précoce? – Tranquility
En outre, comment puis-je trouver le code source réel pour des méthodes telles que findFirst, via grep? Quelle classe particulière est l'implémentation réelle de cette méthode? – Tranquility
@ user3780370, oui, d'autres threads vérifient le résultat initial dans 'allMatch' /' noneMatch'. Grep peut vous aider, mais généralement j'utilise les fonctionnalités IDE pour naviguer dans le code JDK. Les deux Eclipse et IDEA peuvent le faire d'une manière assez confortable. –