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

时间: 2024-10-10 08:10:13

JDK5新特性之同步集合(五)的相关文章

JDK5.0 特性线程 同步装置之CountDownLatch 同步装置之CyclicBarrier 线程 BlockingQueue

来自:http://www.cnblogs.com/taven/category/475298.html 1 import java.util.concurrent.CountDownLatch; 2 import java.util.concurrent.ExecutorService; 3 import java.util.concurrent.Executors; 4 5 /** 6 * CountDownLatch维护一个计数器,等待这个CountDownLatch的线程必须等到计数器为

JDK5.0 特性-线程同步装置之Semaphore

来自:http://www.cnblogs.com/taven/archive/2011/12/17/2291474.html 1 import java.util.ArrayList; 2 3 import java.util.concurrent.ExecutorService; 4 5 import java.util.concurrent.Executors; 6 7 import java.util.concurrent.Semaphore; 8 9 import java.util.

Java API —— JDK5新特性

JDK5新特性 自动拆装箱.泛型.增强for.静态导入.可变参数.枚举   1.增强for概述 1)简化数组和Collection集合的遍历 2)格式: for(元素数据类型 变量 : 数组或者Collection集合) { 使用变量即可,该变量就是元素 } 3)好处:简化遍历 4)注意事项:增强for的目标要判断是否为null 例子1: package jdk5; import java.util.ArrayList; import java.util.List; /** * Created

JDK5新特性之 可变参数的方法

可变参数的方法:不知道这个方法该定义多少个参数 注意: > 参数实际上是数组 > 必须写在参数列表最后一个 package cn.itcast.day24.varparam; import java.lang.reflect.Type; /** * * JDK5新特性之 可变参数 * 定义方法时,不知道该定义多少个参数 * * 格式: * 修饰符 方法返回值 方法名(数据类型 ... 变量名){} * * 注意: * 可变参数实际上是一个数组 * 可变参数必须写在方法的参数列表的最后 * */

JDK5新特性之线程同步集合(五)

一. 传统集合: 传统方式下的Collection在迭代集合时, 不同意对集合进行改动: public class CollectionModifyExceptionTest { public static void main(String[] args) { Collection<String> list = new ArrayList<String>(); list.add("aaa"); list.add("bbb"); list.ad

泛型,JDK5新特性,List集合子实现类,Map集合,Set/TreeSet集合,asList

一.泛型(JDK5以后新特性) 1.概述:泛型直接规定集合的存储类型,将明确的集合类型的工作推迟到了创建对象或者调用方法的时候,属于一种参数化类型,可作参数传递.2.优点(1)将运行时期异常提前到了编译时期:(2)优化了设计,解决了×××警告线问题:(3)避免了强制类型转换, ,解决了向下类型转换出现的问题ClassCastException:(4)泛型的引出可以提供程序的安全性.3.泛型定义在类上(1)格式:public class 类名<T>{--}(2)实例:实体类: 测试类: 4.泛型

java 基础加强(myeclipse,debug,junit,JDK5新特性,反射)

思维导图 1.myeclipse的安装和使用 *eclipse:是一个免费的开发工具 *myeclipse:是一个收费的插件,破解myeclipse, **安装目录的要求: 不能有中文和空格 **安装完成之后,选择一个工作空间 ,这个工作空间不能有中文和空格 *破解myeclipse **运行run.bat文件,但是运行之前,必须要安装jdk,通过配置环境变量 *myeclipse的使用 *创建一个工程 -类型 javaproject  web  project -选择依赖的jdk,可以使用my

JDK5新特性之线程同步工具类(三)

一. Semaphore实现信号灯 Semaphore可以控制同时访问资源的线程个数, 例如: 实现一个文件允许的并发访问数. Semaphore实现的功能就类似厕所有5个坑, 加入有十个人要上厕所, 那么同时只能有5个人能够占用, 当5个人中的任何一个人离开后, 其中在等待的另外5个人中就有一个可以占用了. 另外等待的5个人中可以是随机获得优先机会, 也可以使按照先来后到的顺序获得机会, 这取决于构造Semaphore对象时传入的参数选项. /** * Semaphore:信号灯 */ pub

JDK5新特性之泛型

泛型是一种把类型明确的工作推迟到创建对象或者调用方法的时候才去明确的特殊的类型. 泛型的格式: <数据类型> 注意:此处的数据类型这能是引用类型 好处: A:把运行时期的问题提前到了编译期间 B:避免了强制类型转换 C:优化了程序设计 import java.util.ArrayList;public class ArrayListDemo { public static void main(String[] args) { ArrayList array = new ArrayList();