Je sais qu'ArrayList est une classe non sécurisée pour les threads et ne peut pas directement ajouter() et supprimer() dans des situations multithread, mais puis-je utiliser la méthode set(int index, E element) ?
List records = InstanceUtil.newArrayList(); for (int i = 0; i < ids.getRecords().size(); i++) { records.add(null); } ExecutorService executorService = Executors.newFixedThreadPool(5); for (int i = 0; i < ids.getRecords().size(); i++) { final int index = i; executorService.execute(() -> records.set(index, queryById(ids.getRecords().get(index)))); }
La sécurité sans thread signifie quetoutes lesopérations de List ne sont pas verrouillées. Vous devez donc contrôler le verrou dans votre propre thread professionnel.
En regardant cette logique, chaque valeur d'index ne peut être accédée (attribuée) que par un seul thread, et il n'y a pas d'accès multithread au même index