java - La méthode set(int index, E element) dans ArrayList n'a pas besoin d'être synchronisée en cas de multithreading
为情所困
为情所困 2017-05-27 17:40:40
0
2
713

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))));
      }
为情所困
为情所困

répondre à tous(2)
阿神

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

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal