摘要:对象的组合介绍一些组合模式,这些模式能够使一个类更容易成为线程安全的,并且维护这些类时不会无意破坏类的安全性保证。状态变量的所有者将决定采用何种加锁协议来维持变量状态的完整性。所有权意味着控制权。
对象的组合
介绍一些组合模式,这些模式能够使一个类更容易成为线程安全的,并且维护这些类时不会无意破坏类的安全性保证。设计线程安全的类
在设计线程安全类的过程中,需要包含以下三个基本要素:
找出构成对象状态的所有变量
找出约束对象状态的不可变性条件。
建立对象状态的并发访问管理策略。
收集同步需求如果不了解对象的不变性条件与后验条件,那么就不能确保线程的安全性。要满足在状态变量的有效值或状态转换上的各种约束条件,就需要借助于原子性与分装性。依赖状态的操作
类的不变性条件与后验条件约束了对象上有哪些状态和状态转移转换是有效的。在某些对象的方法中还包含一些基于状态的先验条件。状态的所有权
对象封装它拥有的状态,反之也成立,即对它封装的状态拥有所有权。状态变量的所有者将决定采用何种加锁协议来维持变量状态的完整性。所有权意味着控制权。实例封闭 Java监视器模式
把对象的所有可变状态都封装起来,并由对象自己的内置锁来保护。
线程的安全机制如果一个类是有多个独立且线程安全的状态变量组成,并且在所有的操作中都不包含无效的状态转换,那么可以将线程安全性委托给底层的状态变量。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/74397.html
摘要:线程封闭当访问共享的可变数据时,通常需要使用同步。如果仅在单线程内访问数据,就不要同步。这种技术成为线程封闭。栈封闭栈封闭是线程封闭的一种特例,在栈封闭中,只能通过局部变量才能访问对象。,对象是正确创建的。 线程封闭 当访问共享的可变数据时,通常需要使用同步。一种避免使用同步的方式就是不共享数据。如果仅在单线程内访问数据,就不要同步。这种技术成为线程封闭(Thread Confine...
摘要:无状态的是线程安全的,当无状态变为有状态时就是不安全的破坏了线程的安全性,非原子性操作竞态条件在并发编程中,由于不恰当的执行时序而出现的不正确结果是一种非常重要的情况,被称之为竞态条件。重入意味着获取锁的操作的粒度是线程,而不是调用。 这本书的内容是什么? 本书提供了各种实用的设计规则,用于帮助开发人员创建安全的和高性能的并发类。 什么类是线程安全的? 当多个线程访问某...
摘要:对象的共享上一章介绍了如何通过同步来避免多个线程在同一时刻访问相同的数据,而本章将介绍如何共享和发布对象,从而使它们能够安全地由多个线程同时访问。为了确保多个线程的之间对内存写入操作的可见性,必须使用同步机制。 对象的共享 上一章介绍了如何通过同步来避免多个线程在同一时刻访问相同的数据,而本章将介绍如何共享和发布对象,从而使它们能够安全地由多个线程同时访问。 列同步代码块和同步方法可...
摘要:上集算法实现的优点当一个线程执行任务失败不影响其他线程的进行最大限度的利用资源能提高程序的伸缩性伸缩性不修改任何代码升级硬件就能带来性能上的提高升级硬件带来的性能提高明显就是伸缩性良好的缺点代码复杂影响阅读性刚开始看的时候没有正确的思路理解 ConcurrentLinkedQueue(上集) 算法实现 CAS CAS的优点 当一个线程执行任务失败不影响其他线程的进行 最大限度的利用...
摘要:过程是一个计算单元,计算是通过通讯来完成的。标题的表达式里还有一个符号,表示一个无行为的过程。一个过程的是它和外部产生行为交互的唯一方式。所以如果两个过程需要通过一个交互,这个必须在两个过程中都是,其中一方用于发送,另一方用于接收。 这篇文章的标题是一个π表达式,结尾是一段JavaScript代码,和这个表达式的含义完全一致,或者说,完成了这个表达式的估值。 π演算(π calculu...
阅读 3594·2021-11-23 09:51
阅读 1958·2021-11-16 11:42
阅读 3171·2021-11-08 13:20
阅读 1074·2019-08-30 15:55
阅读 2147·2019-08-30 10:59
阅读 1213·2019-08-29 14:04
阅读 932·2019-08-29 12:41
阅读 1909·2019-08-26 12:22