同步集合类 -笔记整理13
来源:互联网 发布:涡扇15发动机 知乎 编辑:程序博客网 时间:2024/06/03 21:07
同步集合
1.传统集合类在并发访问时的问题说明。
2.传统方式下用Collections工具类提供的synchronzedCollection方法来获得同步集合,分析该方法的实现源码。
得到的同步集合,是在操作集合的增删改方法加了锁,不可以同时操作。
3.Java5种提供了如下一些同步集合类:
(1)通过看Java.util.concurrent包下的介绍可以知道有哪些并发集合
ConcurrentHashMap,CopyOnWriteArrayList,CopyOnWriteArraySet.
4.传统方式下的Collection在迭代集合时,不允许对集合进行修改。
(1)根据AbstracList的checkForComodification方法的源码,分析产生ConcurrentModificationException异常的原因。
对CopyOnWriteArrayList对象使用代码示例1:
public class CollectionModifyExceptionTest {public static void main(String[] args) {//LinkedList users = new LinkedList();//ArrayList users = new ArrayList();//HashSet users = new HashSet();Collection users = new CopyOnWriteArrayList();//new ArrayList();users.add(new User("张三",28));users.add(new User("李四",25));users.add(new User("王五",31));Iterator itrUsers = users.iterator();//Iterator itrUsers=users.listIterator(); /* 理解iterator() listIterator() 俩个迭代器的去区别list的子类和set、map都可以使用iterator迭代器遍历只有list集合才可以获取listIterator集合,listIterator可以对迭代集合增加,删除元素,方法更多 */while(itrUsers.hasNext()){System.out.println("aaaa");User user = (User)itrUsers.next();if("李四".equals(user.getName())){//itrUsers.remove(); //使用迭代器删除也不会报错, users.remove(user); //在使用迭代器进行遍历集合的时候,不允许对集合修改,可以使用并发集合 //通过查看报错源码,在next()方法中维护了一个集合版本,都操作了集合,与期望版本不一致,抛出异常} else {System.out.println(user);}}}}
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;}}
0 0
- 同步集合类 -笔记整理13
- 黑马程序员 集合类的笔记整理
- java整理笔记之集合
- 集合类的同步
- 多线程 同步集合类
- 同步类CountDownLatch整理
- 同步类CyclicBarrier整理
- Java集合类(整理)
- 集合类整理
- 集合类整理
- java集合类整理
- Java 集合类整理
- Java集合类整理
- java集合类整理
- 多线程同步问题-练习题1-笔记整理
- 多线程同步问题-练习题2-笔记整理
- 多线程同步问题-练习题3-笔记整理
- Java知识点整理:第十章:包装类、集合的复制、集合线程同步化(线程安全)、集合与数组的相互转换
- 合并两个排序的链表
- HDOJ 2004 成绩转换
- 什么是TTL电平、CMOS电平?两者的区别?
- sqlite判断表或者字段是否存在
- 使用youtube-dl下载YouTube视频
- 同步集合类 -笔记整理13
- SpringBoot非官方教程 | 第十三篇:springboot集成spring cache
- 3台hadoop集群部署计划---安装系列一
- 算法分析与设计课程(10):【leetcode】Simplify Path
- 教你如何在Oracle官网免登陆下载oracle数据库以及相关工具
- 四月英语总结
- Spring知识整理
- 多线程样例
- JavaScript基础(2)之arguments详解