java - ArrayList中的set(int index, E element)方法,在多執行緒的情況下是不是不用同步
为情所困
为情所困 2017-05-27 17:40:40
0
2
703

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

全部回覆(2)
阿神

非線程安全的意思就是 List 的所有的操作都沒有加鎖。所以你需要在自己的業務線程中控制鎖。

为情所困

看這個邏輯是每個 index 的值只有一個執行緒存取(賦值),對同一個 index 的存取並沒有出現多執行緒

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!