当前位置: 代码迷 >> 编程 >> 线程高级使用-心得8-java5线程并发库中同步集合Collections工具类的应用及案例分析
  详细解决方案

线程高级使用-心得8-java5线程并发库中同步集合Collections工具类的应用及案例分析

热度:5900   发布时间:2013-02-26 00:00:00.0
线程高级应用-心得8-java5线程并发库中同步集合Collections工具类的应用及案例分析

1. HashSet与HashMap的联系与区别?

   区别:前者是单列后者是双列,就是hashmap有键有值,hashset只有键;

   联系:HashSet的底层就是HashMap,可以参考HashSet的类源码,默认构造方法为:

   public HashSet(){

      map = new HashMap<key,Object>

   }

  就是HashSet只用HashMap的键,而不用他的值,前者的值可以程序员随便指定,反正不用

2. 线程并发库中的集合优路劣之分

 HashMap和HashSet如果在成千上万个线程并发的时候会使cup占满;这时java5线程并发库中开发了新技术并发库集合;可以使用其中的ConcurrentMap,也可以在HashMap的使用时加上同步锁synchronized;其实ConcurrentMap类的编写中就是在重写原来HashMap中的所有方法,只是返回值是原来的方法加上了一个同步锁

3.同步集合

 4.下面举一个线程并发库集合中的类的案例应用,这个案例比较贴近改知识点的说明package com.java5.thread.newSkill;import java.util.ArrayList;import java.util.Collection;import java.util.Iterator;import java.util.concurrent.CopyOnWriteArrayList;public class CollectionModifyExceptionTest {	/**	 * @param args	 */	public static void main(String[] args) {		//CopyOnWriteArrayList为线程并发库集合中的类,可以避免HashMap中的并发异常		/*		 * 直接使用传统的ArrayList会出现各式各样的线程并发异常异常,有兴趣的可以试试		 */		Collection<User> users = new CopyOnWriteArrayList<User>();		//Collection<User> users = new ArrayList<User>();		users.add(new User("杨凯", 21));		users.add(new User("杨旋", 20));		users.add(new User("潇洒", 22));		Iterator itrUsers = users.iterator();		while (itrUsers.hasNext()) {			User user = (User) itrUsers.next();			if ("潇洒".equals(user.getName())) {				users.remove(user);			} else {				System.out.println(user);			}		}	}}辅助类:User类package com.java5.thread.newSkill;public class User {	private String name;	private int age;	User(String name, int age) {		super();		this.name = name;		this.age = age;	}		public String getName() {		return name;	}	public void setName(String name) {		this.name = name;	}	public int getAge() {		return age;	}	public void setAge(int age) {		this.age = age;	}	@Override	public int hashCode() {		final int prime = 31;		int result = 1;		result = prime * result + age;		result = prime * result + ((name == null) ? 0 : name.hashCode());		return result;	}	@Override	public boolean equals(Object obj) {		if (this == obj)			return true;		if (obj == null)			return false;		if (getClass() != obj.getClass())			return false;		User other = (User) obj;		if (age != other.age)			return false;		if (name == null) {			if (other.name != null)				return false;		} else if (!name.equals(other.name))			return false;		return true;	}	@Override	public String toString() {		return "User [age=" + age + ", name=" + name + "]";	}	@Override	protected Object clone() throws CloneNotSupportedException {		return super.clone();	}	}


 

 

  相关解决方案