cari

Rumah  >  Soal Jawab  >  teks badan

java - Kaedah set(int index, E element) dalam ArrayList tidak perlu disegerakkan dalam kes multi-threading

Saya tahu bahawa ArrayList ialah kelas tidak selamat benang dan tidak boleh terus menambah() dan mengeluarkan() dalam situasi berbilang benang, tetapi bolehkah saya menggunakan kaedah 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))));
      }
为情所困为情所困2769 hari yang lalu736

membalas semua(2)saya akan balas

  • 阿神

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

    Keselamatan bukan benang bermakna semua operasi Senarai tidak dikunci. Jadi anda perlu mengawal kunci dalam utas perniagaan anda sendiri.

    balas
    0
  • 为情所困

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

    Melihat logik ini, setiap nilai indeks hanya boleh diakses (diberikan) oleh satu utas, dan tiada akses berbilang benang kepada indeks yang sama.

    balas
    0
  • Batalbalas