java – Die Methode set(int index, E element) in ArrayList muss im Fall von Multithreading nicht synchronisiert werden
为情所困
为情所困 2017-05-27 17:40:40
0
2
651

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

Antworte allen (2)
阿神

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

    为情所困

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

      Neueste Downloads
      Mehr>
      Web-Effekte
      Quellcode der Website
      Website-Materialien
      Frontend-Vorlage
      Über uns Haftungsausschluss Sitemap
      Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!