Heim  >  Fragen und Antworten  >  Hauptteil

java – Die Methode set(int index, E element) in ArrayList muss im Fall von Multithreading nicht synchronisiert werden

Ich weiß, dass ArrayList eine Thread-unsichere Klasse ist und in Multithread-Situationen nicht direkt add() und Remove() hinzufügen kann, aber kann ich die Methode set(int index, E element) verwenden?

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

Antworte allen(2)Ich werde antworten

  • 阿神

    阿神2017-05-27 17:42:40

    非线程安全的意思就是 List 的所有的操作都没有加锁。所以你需要在自己的业务线程中控制锁。

    Antwort
    0
  • 为情所困

    为情所困2017-05-27 17:42:40

    看这个逻辑是每一个 index 的值只有一个线程访问(赋值),对同一个 index 的访问并没有出现多线程

    Antwort
    0
  • StornierenAntwort