线程高级应用-心得8-java5线程并发库中同步集合Collections工具类的应用及案例分析
来源:互联网 发布:淘宝上的装修公司 编辑:程序博客网 时间:2024/04/29 12:16
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;}@Overridepublic int hashCode() {final int prime = 31;int result = 1;result = prime * result + age;result = prime * result + ((name == null) ? 0 : name.hashCode());return result;}@Overridepublic 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;}@Overridepublic String toString() {return "User [age=" + age + ", name=" + name + "]";}@Overrideprotected Object clone() throws CloneNotSupportedException {return super.clone();}}
- 线程高级应用-心得8-java5线程并发库中同步集合Collections工具类的应用及案例分析
- 线程高级应用-心得7-java5线程并发库中阻塞队列Condition的应用及案例分析
- 线程高级应用-心得4-java5线程并发库介绍,及新技术案例分析
- 线程高级应用-心得6-java5线程并发库中同步工具类(synchronizers),新知识大用途
- 线程高级应用-心得5-java5线程并发库中Lock和Condition实现线程同步通讯
- 8-java5线程并发库的应用
- 线程高级应用-心得2-同步锁讲解及面试题案例分析
- java5线程并发库的应用(九)
- 线程高级应用-心得3-线程范围内的共享变量以及应用场景及面试题案例分析
- 线程高级应用-心得1-传统线程和定时器讲解及案例分析
- 多线程并发库高级应用 之 java5中的线程并发库--线程池、Callable&Future
- 多线程并发库高级应用 之 java5中的线程并发库--线程锁技术
- 多线程并发库高级应用 之 java5中的线程并发库--线程池、Callable&Future
- java多线程并发库高级应用 之 java5中的线程并发库--线程池、Callable&Future
- 多线程并发库高级应用 之 java5中的线程并发库--线程锁技术
- 多线程并发库高级应用 之 使用java5中同步技术的3个面试题
- 多线程并发库高级应用 之 使用java5中同步技术的3个面试题
- 【Java多线程与并发库】17.java5同步集合类的应用
- ⑨讲图论第三课: 图的邻接表表示法
- HDU 1518 Square
- 线程高级应用-心得7-java5线程并发库中阻塞队列Condition的应用及案例分析
- 选择排序——快速排序
- 在windows7上安装apache2.4.3 [菜鸟教程]
- 线程高级应用-心得8-java5线程并发库中同步集合Collections工具类的应用及案例分析
- OJDBC版本区别 [ojdbc14.jar,ojdbc5.jar和ojdbc6.jar的区别]
- 线程高级应用-心得9-空中网的三道面试题,考察应试者的线程掌握的深度
- 解决单例设计模式中懒汉式线程安全问题
- Linux 数独小游戏 curses cs50 作业
- delphi 数组定义
- POJ 2339 Rock, Scissors, Paper
- JDBC连接ORACLE
- Template extends xiaodao @version1.0