java - Kaedah set(int index, E element) dalam ArrayList tidak perlu disegerakkan dalam kes multi-threading
为情所困
为情所困 2017-05-27 17:40:40
0
2
665

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

membalas semua(2)
阿神

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

为情所困

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

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!