Java并发机制(5)--同步容器与并发容器
Java并发编程:同步容器
整理自:博客园-海子-http://www.cnblogs.com/dolphin0520/p/3933404.html
1、同步容器出现原因
常用的ArrayList,LinkedList,HashMap,HashSet,Deque等都是线程不安全的;
Java为方便多线程编程,提供了同步容器供用户使用。
2、同步容器类:
2.1:第一类:Vector(ArrayList)、Stack(Vector的子类)、HashTable(HashMap)
2.2:第二类:Collections类中提供的静态工厂方法创建的类。如Collections.synchronizedXxx()获取
3、同步容器的缺陷:
3.1:使用synchronized关键字进行同步降低了效率;
3.2:像Vector这种add和get方法都进行同步,在多线程读时,竞争锁,效率很低。
3.3:多线程操作同步容器时,可能抛出 ConcurrentModificationException异常。
4、ConcurrentModificationException异常原因及解决
4.1:单线程下:Iterator迭代器迭代时,调用了list的remove修改了容器大小,应该调用Iterator的remove方法;
4.2:多线程下:多个线程执行Iterator并修改,此时Iterator线程私有。
改正:【1】获取Iterator时,使用synchronized或者Lock同步。
【2】使用并发容器CopyOnWriteArrayList代替ArrayList和Vector
5、并发容器:java.util.concurrent包
同步容器将所有对容器状态的访问都串行化,保证了安全,却降低了效率;
5.1:ConcurrentHashMap代替同步的Map(Collections.synchronized(new HashMap()),HashMap同步时锁住所有的段,而ConcurrentHashMap只锁住对应的段(segment);
5.2:CopyOnWriteArrayList和CopyOnWriteArraySet分别代替List和Set,写时复制List和写时复制set;
5.3: 其他
Java并发机制(5)--同步容器与并发容器的更多相关文章
- java 异步机制与同步机制的区别
所谓异步输入输出机制,是指在进行输入输出处理时,不必等到输入输出处理完毕才返回.所以异步的同义语是非阻塞(None Blocking). 网上有很多网友用很通俗的比喻 把同步和异步讲解的很透彻 转过 ...
- 如何正确使用Java异常处理机制
文章来源:leaforbook - 如何正确使用Java异常处理机制作者:士别三日 第一节 异常处理概述 第二节 Java异常处理类 2.1 Throwable 2.1.1 Throwable有五种构 ...
- JAVA同步容器和并发容器
同步容器类 同步容器类的创建 在早期的JDK中,有两种现成的实现,Vector和Hashtable,可以直接new对象获取: 在JDK1.2中,引入了同步封装类,可以由Collections.sync ...
- Java并发——同步容器与并发容器
同步容器类 早期版本的JDK提供的同步容器类为Vector和Hashtable,JDK1.2 提供了Collections.synchronizedXxx等工程方法,将普通的容器继续包装.对每个共有方 ...
- 【Java并发编程二】同步容器和并发容器
一.同步容器 在Java中,同步容器包括两个部分,一个是vector和HashTable,查看vector.HashTable的实现代码,可以看到这些容器实现线程安全的方式就是将它们的状态封装起来,并 ...
- java 普通容器,同步容器,并发容器,同步工具
同步容器,如HashTable,提供独占访问. 并发容器,ConcurrentHashMap,有着更好的并发性能,但是不能独占访问. --putIfAbsent 同步工具: 闭锁:CountDownL ...
- Java并发—同步容器和并发容器
简述同步容器与并发容器 在Java并发编程中,经常听到同步容器.并发容器之说,那什么是同步容器与并发容器呢?同步容器可以简单地理解为通过synchronized来实现同步的容器,比如Vector.Ha ...
- java多线程总结-同步容器与并发容器的对比与介绍
1 容器集简单介绍 java.util包下面的容器集主要有两种,一种是Collection接口下面的List和Set,一种是Map, 大致结构如下: Collection List LinkedLis ...
- Java并发编程:同步容器
Java并发编程:同步容器 为了方便编写出线程安全的程序,Java里面提供了一些线程安全类和并发工具,比如:同步容器.并发容器.阻塞队列.Synchronizer(比如CountDownLatch). ...
随机推荐
- bi工具是什么,如何选择?
商业智能使用的一套方法和技术根据解决方案的目的而广泛多样化.有些工具专注于数据准备方面,可能包括ETL(提取,转换,加载)层,以更好地组织和利用数据.有些工具专注于更广泛的企业使用,可能专注于数据混 ...
- windev的字符集选择设置及元素命名方法建议
windev支持多语言,且支持整站翻译,同时支持最终用户的多语言选择,可以说多语言功能已经非常的全面和强大. windev原生支持英语.法语和葡萄牙语,在使用如中文等非拉丁字母语言时,需要在多个地方进 ...
- [MethodImpl(MethodImplOptions.Synchronized)]与lock机制
[MethodImpl(MethodImplOptions.Synchronized)]与lock机制 在进行.NET开发时,经常会遇见如何保持线程同步的情况.在众多的线程同步的可选方式中,加锁无疑是 ...
- Scala学习笔记(详细)
第2章 变量 val,var,声明变量必须初始化:变量类型确定后不可更改 数据类型:与java有相同的数据类型,在scala中数据类型都是对象 特殊类型:Unit:表示无值,只有一个实例值写出(),相 ...
- SpringMVC教程--eclipse中使用maven创建springMVC项目
一.在eclipse中创建maven-archetype-webapp项目: 1.新建项目选择maven项目 2.默认,下一步 3.选择maven-archetype-webapp,其他保持默认即可 ...
- Qt:QSqlDatabase
0.说明 QSqlDatabase类处理与数据库连接相关的操作.一个QSqlDatabase实例就代表了一个连接,连接时要提供访问数据库的driver,driver继承自QSqlDriver. 通过静 ...
- Scrapy(五):Response与Request、数据提取、Selector、Pipeline
学习自Requests and Responses - Scrapy 2.5.0 documentation Request在Spider中生成,被Downloader执行,之后会得到网页的Respo ...
- Python:Scrapy(一) 基础知识与实例
学习自: Scrapy爬虫框架教程(一)-- Scrapy入门 - 知乎 Scrapy爬虫框架,入门案例(非常详细)_ck784101777的博客-CSDN博客_scrapy爬虫案例 爬虫框架Scra ...
- STC8单片机波特率115200时乱码解决
最近开发一个STC8单片机(STC8H3K32S2)项目,需要通过传口与蓝牙模块通讯,波特率高于57600后STC接收时出现乱码,但发送时正常.当将stc8串口和蓝牙串口分别接USB转串口模块通讯正常 ...
- Spring注解简析
JAVA 元注解 @Documented @Inherited @Retention @Target @Repeatable @Native 在java.lang.annotation包下,除了@Na ...