您的位置:首页 > 编程语言 > Java开发

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

2017-01-08 13:49 801 查看
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.同步集合



1  4.下面举一个线程并发库集合中的类的案例应用,这个案例比较贴近改知识点的说明
2 package com.java5.thread.newSkill;
3
4 import java.util.ArrayList;
5 import java.util.Collection;
6 import java.util.Iterator;
7 import java.util.concurrent.CopyOnWriteArrayList;
8
9 public class CollectionModifyExceptionTest {
10
11     /**
12      * @param args
13      */
14     public static void main(String[] args) {
15
16         //CopyOnWriteArrayList为线程并发库集合中的类,可以避免HashMap中的并发异常
17         /*
18          * 直接使用传统的ArrayList会出现各式各样的线程并发异常异常,有兴趣的可以试试
19          */
20         Collection<User> users = new CopyOnWriteArrayList<User>();
21         //Collection<User> users = new ArrayList<User>();
22         users.add(new User("杨凯", 21));
23         users.add(new User("杨旋", 20));
24         users.add(new User("潇洒", 22));
25         Iterator itrUsers = users.iterator();
26         while (itrUsers.hasNext()) {
27             User user = (User) itrUsers.next();
28             if ("潇洒".equals(user.getName())) {
29                 users.remove(user);
30             } else {
31                 System.out.println(user);
32             }
33         }
34     }
35
36 }
37
38 辅助类:User类
39 package com.java5.thread.newSkill;
40
41 public class User {
42
43     private String name;
44     private int age;
45     User(String name, int age) {
46         super();
47         this.name = name;
48         this.age = age;
49     }
50
51     public String getName() {
52         return name;
53     }
54
55     public void setName(String name) {
56         this.name = name;
57     }
58
59     public int getAge() {
60         return age;
61     }
62
63     public void setAge(int age) {
64         this.age = age;
65     }
66
67     @Override
68     public int hashCode() {
69         final int prime = 31;
70         int result = 1;
71         result = prime * result + age;
72         result = prime * result + ((name == null) ? 0 : name.hashCode());
73         return result;
74     }
75     @Override
76     public boolean equals(Object obj) {
77         if (this == obj)
78             return true;
79         if (obj == null)
80             return false;
81         if (getClass() != obj.getClass())
82             return false;
83         User other = (User) obj;
84         if (age != other.age)
85             return false;
86         if (name == null) {
87             if (other.name != null)
88                 return false;
89         } else if (!name.equals(other.name))
90             return false;
91         return true;
92     }
93     @Override
94     public String toString() {
95         return "User [age=" + age + ", name=" + name + "]";
96     }
97     @Override
98     protected Object clone() throws CloneNotSupportedException {
99         return super.clone();
100     }
101
102 }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐