标签:写入 ++ arraylist pac public 效率 ext override current
多个线程再获取同一个集合里面的数据同时,修改集合中的数据。
package com.duchong.juc; import java.util.ArrayList; import java.util.Collections; import java.util.Iterator; import java.util.List; /* * CopyOnWriteArrayList/CopyOnWriteArraySet : “写入并复制” * 注意:添加操作多时,效率低,因为每次添加时都会进行复制,开销非常的大。并发迭代操作多时可以选择。 */ public class TestCopyOnWriteArrayList { public static void main(String[] args) { HelloThread ht = new HelloThread(); for (int i = 0; i < 10; i++) { new Thread(ht).start(); } } } class HelloThread implements Runnable{ //方式一 private static List<String> list = Collections.synchronizedList(new ArrayList<String>()); static{ list.add("AA"); list.add("BB"); list.add("CC"); } @Override public void run() { Iterator<String> it = list.iterator(); while(it.hasNext()){ System.out.println(it.next()); list.add("DD"); } } }
结果:
package com.duchong.juc; import java.util.Iterator; import java.util.concurrent.CopyOnWriteArrayList; /* * CopyOnWriteArrayList/CopyOnWriteArraySet : “写入并复制” * 注意:添加操作多时,效率低,因为每次添加时都会进行复制,开销非常的大。并发迭代操作多时可以选择。 */ public class TestCopyOnWriteArrayList { public static void main(String[] args) { HelloThread ht = new HelloThread(); for (int i = 0; i < 10; i++) { new Thread(ht).start(); } } } class HelloThread implements Runnable{ private static CopyOnWriteArrayList<String> list = new CopyOnWriteArrayList<>(); static{ list.add("AA"); list.add("BB"); list.add("CC"); } @Override public void run() { Iterator<String> it = list.iterator(); while(it.hasNext()){ System.out.println(it.next()); list.add("DD"); } } }
问题解决。
利用CopyOnWriteArrayList解决并发修改异常问题
标签:写入 ++ arraylist pac public 效率 ext override current
原文地址:https://www.cnblogs.com/geekdc/p/10289192.html