博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
19.Java5同步集合类的应用
阅读量:6458 次
发布时间:2019-06-23

本文共 2506 字,大约阅读时间需要 8 分钟。

HashSet内部是用的HashMap,只用了HashMap的key。

同步集合
    传统集合类在并发访问时的问题说明:死锁死循环
    传统方式下用Collections工具类提供的synchronizedCollection方法来获得同步集合,分析该方法的实现源码
    Java5中提供了如下一些同步集合类:
       通过看java.util.concurrent包下的介绍可以知道有哪些并发集合
        ConcurrentHashMap
        CopyOnWriteArrayList
        CopyOnWriteArraySet
    传统方式下的Conllection在迭代结合时,不允许对集合进行修改。
        根据AbstractList的checkForComodification方法的源码,分析产生ConcurrentModificationException异常的原因。
public class User implements Cloneable{    private String name;    private int age;        public User(String name, int age) {        this.name = name;        this.age = age;    }    public boolean equals(Object obj) {        if(this == obj) {            return true;        }        if(!(obj instanceof User)) {            return false;            }        User user = (User)obj;        //if(this.name==user.name && this.age==user.age)        if(this.name.equals(user.name)             && this.age==user.age) {            return true;        }        else {            return false;        }    }    public int hashCode() {        return name.hashCode() + age;    }        public String toString() {        return "{name:'" + name + "',age:" + age + "}";    }    public Object clone()  {        Object object = null;        try {            object = super.clone();        } catch (CloneNotSupportedException e) {}        return object;    }    public void setAge(int age) {        this.age = age;    }    public String getName() {        return name;    }}
1 import java.util.Collection; 2 import java.util.Iterator; 3 import java.util.concurrent.CopyOnWriteArrayList; 4  5 /** 6  * 迭代集合的时候不能增加、删除,如果修改了,next()方法中的版本号就会出现不一致了。 7  * @author LiTaiQing 8  * 9  */10 public class CollectionModifyExceptionTest {11     public static void main(String[] args) {12         Collection
users = new CopyOnWriteArrayList
();13 14 //new ArrayList();15 users.add(new User("张三",28)); 16 users.add(new User("李四",25)); 17 users.add(new User("王五",31)); 18 Iterator
itrUsers = users.iterator();19 while(itrUsers.hasNext()){20 System.out.println("aaaa");21 User user = (User)itrUsers.next();22 if("李四".equals(user.getName())){23 users.remove(user);24 //itrUsers.remove();25 } else {26 System.out.println(user); 27 }28 }29 }30 }

 

转载于:https://www.cnblogs.com/litaiqing/p/4651319.html

你可能感兴趣的文章
python之6-1常用函数
查看>>
LeetCode分类-前400题
查看>>
freopen()函数
查看>>
由浅入深了解EventBus:(五)
查看>>
LeetCode 951. Flip Equivalent Binary Trees
查看>>
翻书插件:bookblock.js
查看>>
bzoj2530 [POI2011]Party
查看>>
Java模拟http上传文件请求(HttpURLConnection,HttpClient4.4,RestTemplate)
查看>>
数据库中的左连接(left join)和右连接(right join)区别
查看>>
maven gradle等三放jar包仓库
查看>>
Java练习 SDUT-1294_选票统计
查看>>
设置三个按钮等宽分布
查看>>
2016-2017 ACM Central Region of Russia Quarterfinal Programming Contest
查看>>
gluoncv 目标检测,训练自己的数据集
查看>>
C++ 类型转换归纳
查看>>
ButterKnife8.5.1最新版本使用详细步骤
查看>>
团队项目第一阶段站立会议01
查看>>
68.TextView设置中划线、下划线
查看>>
[bzoj 4066]简单题
查看>>
14.段落排版--行间距(行高)
查看>>