知识大全 Java理论与实践: 描绘线程安全性[2]

Posted

篇首语:如果惧怕前面跌宕的山岩,生命就永远只能是死水一潭。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Java理论与实践: 描绘线程安全性[2]相关的知识,希望对你有一定的参考价值。

Java理论与实践: 描绘线程安全性[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  线程安全

  线程安全的对象具有在上面 线程安全 一节中描述的属性 由类的规格说明所规定的约束在对象被多个线程访问时仍然有效 不管运行时环境如何排列 线程都不需要任何额外的同步 这种线程安全性保证是很严格的 许多类 如 Hashtable 或者 Vector 都不能满足这种严格的定义

  有条件的线程安全

  我们在 月份的文件 并发集合类 中讨论了有条件的线程安全 有条件的线程安全类对于单独的操作可以是线程安全的 但是某些操作序列可能需要外部同步 条件线程安全的最常见的例子是遍历由 Hashtable 或者 Vector 或者返回的迭代器 由这些类返回的 fail fast 迭代器假定在迭代器进行遍历的时候底层集合不会有变化 为了保证其他线程不会在遍历的时候改变集合 进行迭代的线程应该确保它是独占性地访问集合以实现遍历的完整性 通常 独占性的访问是由对锁的同步保证的 并且类的文档应该说明是哪个锁(通常是对象的内部监视器(intrinsic monitor))

  如果对一个有条件线程安全类进行记录 那么您应该不仅要记录它是有条件线程安全的 而且还要记录必须防止哪些操作序列的并发访问 用户可以合理地假设其他操作序列不需要任何额外的同步

  线程兼容

  线程兼容类不是线程安全的 但是可以通过正确使用同步而在并发环境中安全地使用 这可能意味着用一个 synchronized 块包围每一个方法调用 或者创建一个包装器对象 其中每一个方法都是同步的(就像 Collections synchronizedList() 一样) 也可能意味着用 synchronized 块包围某些操作序列 为了最大程度地利用线程兼容类 如果所有调用都使用同一个块 那么就不应该要求调用者对该块同步 这样做会使线程兼容的对象作为变量实例包含在其他线程安全的对象中 从而可以利用其所有者对象的同步

  许多常见的类是线程兼容的 如集合类 ArrayList 和 HashMap java text SimpleDateFormat 或者 JDBC 类 Connection 和 ResultSet

  线程对立

  线程对立类是那些不管是否调用了外部同步都不能在并发使用时安全地呈现的类 线程对立很少见 当类修改静态数据 而静态数据会影响在其他线程中执行的其他类的行为 这时通常会出现线程对立 线程对立类的一个例子是调用 System setOut() 的类

  其他线程安全记录考虑

  线程安全类(以及线程安全性程度更低的的类) 可以允许或者不允许调用者锁定对象以进行独占性访问 Hashtable 类对所有的同步使用对象的内部监视器 但是 ConcurrentHashMap 类不是这样 事实上没有办法锁定一个 ConcurrentHashMap 对象以进行独占性访问 除了记录线程安全程序 还应该记录是否某些锁 如对象的内部锁 对类的行为有特殊的意义

  通过将类记录为线程安全的(假设它确实 是线程安全的) 您就提供了两种有价值的服务 您告知类的维护者不要进行会影响其线程安全性的修改或者扩展 您还告知类的用户使用它时可以不使用外部同步 通过将类记录为线程兼容或者有条件线程安全的 您就告知了用户这个类可以通过正确使用同步而安全地在多线程中使用 通过将类记录为线程对立的 您就告知用户即使使用了外部同步 他们也不能在多线程中安全地使用这个类 不管是哪种情况 您都在潜在的严重问题出现 之前防止了它们 而要查找和修复这些问题是很昂贵的

  结束语

  一个类的线程安全行为是其规格说明中的固有部分 应该成为其文档的一部分 因为(还)没有描述类的线程安全行为的声明式方式 所以必须用文字描述 虽然 Bloch 的描述类的线程安全程度的五层系统没有涵盖所有可能的情况 但是它是一个很好的起点 如果每一个类都将这种线程行为的程度加入到其 Javadoc 中 那么可以肯定的是我们大家都会受益

cha138/Article/program/Java/gj/201311/27775

相关参考

知识大全 Java 理论与实践: 正确使用 volatile 变量 线程同步

Java理论与实践:正确使用volatile变量线程同步  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下

知识大全 Java理论与实践: 正确使用Volatile变量

Java理论与实践:正确使用Volatile变量  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  

知识大全 Java开发中的线程安全选择与Swing

Java开发中的线程安全选择与Swing  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Swin

知识大全 基于Java 2运行时安全模型的线程协作

基于Java2运行时安全模型的线程协作  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在Java

知识大全 用java多线程断点续传实践

  /**  *authorannegu  *date  */  annegu做了一个简单的Http多线程的下载程序来讨论一下多线程并发下载以及断点续传的问题  这个程序的功能就是可以分多个线程从目标

知识大全 Java的线程安全四种方式五个等级[2]

Java的线程安全四种方式五个等级[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 

知识大全 Java线程安全和非线程安全

Java线程安全和非线程安全  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  ArrayList和

知识大全 Java线程安全总结

Java线程安全总结  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  最近想将java基础的一些东

知识大全 JAVA高级:多核线程-volatile原理与技巧[2]

JAVA高级:多核线程-volatile原理与技巧[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下

知识大全 EntityFramework用法探索:线程安全实践

EntityFramework用法探索:线程安全实践  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!