zoukankan      html  css  js  c++  java
  • JDK5新特性之线程同步集合(五)

    一. 传统集合:

    传统方式下的Collection在迭代集合时, 不同意对集合进行改动:

    public class CollectionModifyExceptionTest {
    
    	public static void main(String[] args) {
    		Collection<String> list = new ArrayList<String>();  
    		list.add("aaa");
    		list.add("bbb");
    		list.add("ccc");
    		Iterator<String> iter = list.iterator(); 
    		while (iter.hasNext()) {
    			String str = (String) iter.next();
    			if ("aaa".equals(str)) {
    				list.remove(str);
    			} else {
    				System.out.println(str);
    			}
    		}
    	}
    }

    产生下面异常:

    Exception in thread "main" java.util.ConcurrentModificationException
    	at java.util.AbstractList$Itr.checkForComodification(AbstractList.java:372)
    	at java.util.AbstractList$Itr.next(AbstractList.java:343)
    	at com.zdp.thread.CollectionModifyExceptionTest.main(CollectionModifyExceptionTest.java:17)
    

    二. 同步集合:

    JDK5提供了例如以下一些同步集合类:

    ConcurrentHashMap  --> 并发条件下使用,和HashMap继承同一个类,在每一个方法上都加了“锁”

    CopyOnWriteArrayList  --> 能够在循环的时候进行增删操作

    CopyOnWriteArraySet

    public class CollectionModifyExceptionTest {
    
    	public static void main(String[] args) {
    		Collection<String> list = new CopyOnWriteArrayList<String>();  
    		list.add("aaa");
    		list.add("bbb");
    		list.add("ccc");
    		Iterator<String> iter = list.iterator(); 
    		while (iter.hasNext()) {
    			String str = (String) iter.next();
    			if ("aaa".equals(str)) {
    				list.remove(str);
    			} else {
    				System.out.println(str);
    			}
    		}
    	}
    }



  • 相关阅读:
    IWorkspaceFactory pWorkspaceFactory = new ShapefileWorkspaceFactoryClass(); 时,报COMException
    Asp.net MVC 发布到IIS6
    String.Net “System.TypeInitializationException”类型的未经处理的异常在 Spring.NetDemo.exe 中发生
    C#通过外部别名,解决DLL冲突问题
    c# DPI SCale
    c# 技巧
    正则笔记
    php & c# DES
    WPF页面切换
    C# 委托与事件
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/5285949.html
Copyright © 2011-2022 走看看