JDK5新特性之线程同步集合(五)
2023-09-14 09:07:57 时间
一. 传统集合:
传统方式下的Collection在迭代集合时, 不同意对集合进行改动:
public class CollectionModifyExceptionTest { public static void main(String[] args) { Collection<String> list = new ArrayList<String>(); list.add("aaa"); list.add("bbb"); list.add("ccc"); Iterator<String> iter = list.iterator(); while (iter.hasNext()) { String str = (String) iter.next(); if ("aaa".equals(str)) { list.remove(str); } else { System.out.println(str); } } } }
产生下面异常:
Exception in thread "main" java.util.ConcurrentModificationException at java.util.AbstractList$Itr.checkForComodification(AbstractList.java:372) at java.util.AbstractList$Itr.next(AbstractList.java:343) at com.zdp.thread.CollectionModifyExceptionTest.main(CollectionModifyExceptionTest.java:17)
二. 同步集合:
JDK5提供了例如以下一些同步集合类:
ConcurrentHashMap --> 并发条件下使用,和HashMap继承同一个类,在每一个方法上都加了“锁”
CopyOnWriteArrayList --> 能够在循环的时候进行增删操作
CopyOnWriteArraySet
public class CollectionModifyExceptionTest { public static void main(String[] args) { Collection<String> list = new CopyOnWriteArrayList<String>(); list.add("aaa"); list.add("bbb"); list.add("ccc"); Iterator<String> iter = list.iterator(); while (iter.hasNext()) { String str = (String) iter.next(); if ("aaa".equals(str)) { list.remove(str); } else { System.out.println(str); } } } }
相关文章
- .NET 同步与异步 之 线程安全的集合 (十一)
- 数据库读写分离,主从同步实现方法
- Git远程05:远程分支的删除与同步
- 同步与异步、阻塞与非阻塞
- Centos 6.7 配置时间同步解决时间自动变化的问题
- Java中的同步集合与并发集合有什么区别?
- 分布使用synchronized关键字和AtomicInteger进行线程同步的例子
- 分布使用synchronized关键字和AtomicInteger进行线程同步的例子
- 音视频同步 ffmpeg 推流
- twsited中的同步代码使用
- 秒杀多线程第四篇 一个经典的多线程同步问题
- 集合和同步(线程安全)
- 011-多线程-基础-基于AbstractQueuedSynchronizer自定义同步组件
- lotus 重新同步链
- 作为测试人员,如何理解线程同步异步!点进来
- m基于马尔科夫随机场和Gardner环的WSN网络时间同步matlab仿真