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))));
}
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.