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<T> 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 que toutes les opé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