H5W3
当前位置:H5W3 > 其他技术问题 > 正文

ArrayList中的set(int index, E element)方法,在多线程的情况下是不是不用同步

我知道ArrayList是线程不安全的类,在多线程情况下不能直接进行add(),remove(),但是是不是可以使用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))));
      }

回答:

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

回答:

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

本文地址:H5W3 » ArrayList中的set(int index, E element)方法,在多线程的情况下是不是不用同步

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址