java集合框架的线程安全

java集合框架的线程安全

ID:33325798

大小:91.50 KB

页数:4页

时间:2019-02-24

java集合框架的线程安全_第1页
java集合框架的线程安全_第2页
java集合框架的线程安全_第3页
java集合框架的线程安全_第4页
资源描述:

《java集合框架的线程安全》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、Java集合框架的线程安全周庆岳Java集合框架是由Java平台标准版1.2(JavaSE1.2)引入的通用数据结构与算法框架。其灵活的面对对象设计受到了广大Java程序员的一致青睐,为Java平台的成熟奠定了坚实的基础。一个集合(也称容器)是指将一组元素组合成一个单元的简单对象。集合用于存储、取回、操作和传递这些聚合的元素。集合框架是指一个统一的用来表示和操作集合的体系结构[Bloch,1999]。最简单的集合如数组、列表和队列等,集合框架最著名的例子如C++标准库(STL)。线程安全不是一个

2、全有或全无的问题,难以对其进行精确的定义。线程安全笼统地讲是指程序在多线程环境下运行时的正确性。Java集合框架的设计者BlochJoshua在他著名的《Java高效编程》一书中对Java线程安全的等级做出了相对精确的定义[Bloch,2001]:非可变、线程安全、条件线程安全、线程兼容和线程不友好。本文将结合上述Bloch关于线程安全等级的定义,对Java集合框架中的集合类进行线程安全性分析,并指出各个集合类在现实的编程环境中需要注意的并发编程的陷阱;同时对集合框架中通用算法对线程安全性的影响

3、进行分析。所涉及的集合类不仅包括JavaSE1.2引入的集合类,还包括旧集合类(JavaSE1.2前引入)和新集合类-4-(JavaSE5引入)。从而帮助Java程序员在进行并发编程时更加高效地利用Java集合框架。Java线程安全的等级定义根据Bloch的定义,将线程安全分为五个等级,下面将给出这五个等级的描述和部分示例。1、非可变如果一个类的所有实例对于调用它们的客户端对象总是恒定不变的,而无需外部同步,则称为非可变的。字符串类和整数类都是非可变的,但在集合框架中并没有提供直接的非可变类,而

4、是通过对可变类进行封装而得到非可变类。非可变集合不可修改,因而它可以在各个线程间安全共享而无需额外的同步。作为一个好的实践准则,一旦生成非可变类之后,不要再持有被其封装的集合类的引用,这样才可以完全保证其非可变性。2、线程安全类的实例是可变的,但它的所有方法已经通过使用足够的内部同步使其实例可以被并发的使用而无需外部同步。并发的调用将会以某种全局一致的方式连续地执行。随机类和定时器类都是线程安全类。集合框架中线程安全的类并发哈希映射类在JavaSE5中被引入,它并不包含在原来的集合框架中,但它实

5、现了集合框架Map接口。并发哈希映射类实现了并发和效率之间的高效平衡,已被作为哈希表类和同步映射表封装在并发环境下的高效替代品。3、条件线程安全-4-除了某些方法需要在没有其它线程的干扰的情况下顺次执行之外,条件线程安全类和线程安全类类似。为了消除线程干扰的可能性,客户端对象在调用这类方法的过程中需要获得该集合类对象的锁来进行同步。一些旧集合类如Vector和Hashtable都是条件线程安全类,对这些集合类进行遍历操作时需要对其进行外部同步。4、线程兼容对其对象实例的所有方法调用都通过外部同步

6、之后再进行,线程兼容类可以安全的并发使用。集合框架中的通用目的集合的标准实现,如数组链表类和哈希映射表类等都是线程兼容的类。对线程安全的集合类进行遍历操作,需要先获得一个对它的条件线程类封装,然后再通过外部同步来进行遍历。5、线程不友好线程不友好类无法在多线程环境下安全地并发使用,即使对其所有的方法调用都进行外部同步。Java语言中只有很少几个类的方法是线程敌对的,已经被声明为不赞成使用。Java集合框架抽象接口及其实现的线程安全Java集合框架包括三个部分[Bloch,1999]:接口、实现和

7、算法。接口是抽象数据类型的表示集合,接口使得集合的操作和集合的具体实现细节相独立。在面对对象的语言里,这些接口一般形成一个层次结构。实现是指表示这些集合接口的具体实现,实质上是可重用的数据结构,即通用集合类。算法是指可以对实现集合接口的类进行一些实用计算的方法,比如排序和查找。这些算法可以说是多态的,同一个方法可以用于实现了适当接口的不同实现类。这些算法实质上是可重用的功能。Java集合框架的接口层次和通用实现如下:图1Java集合框架的接口层次接口通用实现集合哈希集合、树集合和链接哈希集合列表

8、数组链表和链接链表队列优先级队列映射表哈希映射表、树映射表和链接哈希映射表表1Java接口的通用实现下面按接口分类对集合类进行线程安全分析。分析的对象主要包括表1中的通用实现类,还包括一些特殊用途的实现类。-4-1、集合接口集合是不包含重复元素的抽象集合。实现该接口的集合类包括三个通用实现类哈希集合类、树集合类和链接哈希集合类,两个特殊用途实现类枚举集合类和写复制数组集合类。三个通用实现类和枚举集合类都是线程兼容类,对这些集合类的并发访问都需要进行外部同步。特别是遍历操作,需要先通过调用Coll

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。