第四章 对象的组合

4.1 设计线程安全的类

  三个基本要素 :

  • 找出构成对象状态的所有变量
  • 找出约束状态变量的不变性条件
  • 建立对象状态的并发访问管理策略

4.1.1 同步需求

  如果不了解对象的不变性条件与后验条件,那么就不能确保线程安全性.

  要满足在状态变量的有效值或状态转换上的各种约束条件, 则需要借助于原子性和封装性.

4.1.2 依赖状态的操作

  如果某个操作有基于状态的先验条件, 则该操作称为依赖状态的操作.

  等待某个条件为真的各种内置机制都与内置加锁紧密关联.

  一种更简单的方法是通过现有库中的类(阻塞队列[Block Queue] 或者 信号量[Semaphore]) 来实现依赖状态的操作.

4.1.3 状态的所有权

  状态变量的所有者将决定采用何种加锁协议来维持状态变量的完整性.

  对象发布之前拥有其状态变量的所有权.发布之后又共享控制权.

4.2 实例封闭

  将数据封装在对象内部,将数据的访问和操作限制在对象的方法上,从而更容易的确保线程访问数据时总能持有正确的锁.

  封闭机制更易于构造线程安全的类.

4.2.1 Java 监视器模式

  将对象所有的可变状态封装起来,并有对象自己的内置锁来保护.

原文地址:https://www.cnblogs.com/virgosnail/p/9446469.html

时间: 2024-07-31 16:23:42

第四章 对象的组合的相关文章

《Java并发编程实战》第四章 对象的组合 读书笔记

一.设计线程安全的类 在设计线程安全类的过程中,须要包括下面三个基本要素: . 找出构成对象状态的全部变量. . 找出约束状态变量的不变性条件. . 建立对象状态的并发訪问管理策略. 分析对象的状态,首先从对象的域開始. 变量按作用域划分: . 全局变量 . 局部变量 . 方法行參 . 异常处理參数 1. 收集同步需求 假设不了解对象的不变性条件与后验条件,那么就不能确保线程安全性.要满足在状态变量的有效值或状态转换上的各种约束条件.就须要借助原子性和封装性. 说的更简略些是Java线程安全都是

JAVA并发实战 第四章 对象的组合

4.1 设计线程安全的类 通过使用封装技术,可以使得在不对整个程序进行分析的情况下就可以判断一个类是否是线程安全的. 在设计线程安全类的过程中,需要包含以下三个基本要素:找出构成对象状态的所有变量:找出约束状态变量的不变性条件:建立对象状态的并发访问管理策略. 要分析对象的状态,首先从对象的域开始. 同步策略(Synchronization Policy)定义了如何在不违背对象不变条件或后验条件的情况下对其状态的访问操作进行协同.同步策略规定了如何将不可变性.线程封闭与加锁机制结合起来以维护线程

[Java 并发] Java并发编程实践 思维导图 - 第四章 对象的组合

根据<Java并发编程实践>一书整理的思维导图. 第一部分: 第二部分:

Java核心技术第四章----对象与类重难点总结

一.类之间的关系 类和类之间的关系,耦合度从高到低: is -a.继承.实现 has-a.组合.聚合.关联 user-a.依赖. 要求是:高内聚.低耦合. 继承("is-a") 继承(Inheritance),即"is-a"关系,是一种用于表示特殊与一般关系的.表示类与类(或者接口与接口)之间的父子关系.一般而言,如果类A扩展类B,类A不但包含从类B继承的方法,还会拥有一些额外的功能.在JAVA中,用关键字extends表示继承关系 实现(Implementatio

java线程(四) : 对象的组合

设计线程安全的类: 在设计线程安全类的过程中,需要包含以下三个基本要素: 找出构成对象状态的所有变量 找出约束状态变量的不变性条件 建立对象状态的并发访问策略 如果不了解对象的不变性条件与后验条件,那么就不能确保线程安全性.要满足在状态变量的有效值或状态转换上的各种约束条件,就需要借助于原子性与封装性. 如果在操作中包含有基于状态的先验条件,那么这个操作就称为依赖状态的操作,在并发程序中一直要等到先验条件为真,然后再执行该操作.在java中,等待某个条件为真的各种内置机制(包括等待和通知机制)都

第四章 对象的行为

1.对象有状态和行为两个属性,分别由实例变量和方法表示. 2.对象可以维持自己的实例变量,对象的方法也可以通过实例变量的值而改变对象的行为. 3.方法可以有参数和返回值. 通过实参.形参可以传值给方法,但实参与形参的类型要一致. 返回值与声明的返回值类型也要一致.方法只有一个返回值,若要返回多个值,同类型的可用array类型的返回值,不同类型的可用arraylist类型的返回值. 4.值传递即是拷贝传递,不改变原有参数的值. 5.封装 encapsulation  可以通过public类型的se

第四章 对象、变量和常量

变量的命名方式决定了变量的种类 局部变量:英文字母或_开头 全局变量:$开头(Ruby中不推荐使用全局变量,要避免使用) 实例变量:@开头 类变量 :@@开头 (2) (3) (4) (5)系统关键字又称为保留字 (6)多重赋值(就是只用一个表达式就给多个变量赋值) (7) (8)传统的笨方法置换变量的值 (9)多重赋值的方法置换变量的值 (10) (11) (12)获取嵌套数组的元素

java并发编程实战学习笔记之对象的组合与基础构建模块

第四章 对象的组合 4.1 构建安全的类 4.2 实例封闭 @ThreadSafe public class PersonSet {     @GuardedBy("this") private final Set<Person> mySet = new HashSet<Person>();     public synchronized void addPerson(Person p) {         mySet.add(p);     }     pub

第四章 组合逻辑电路

组合逻辑分析方法 如果有逻辑图 根据逻辑图写出逻辑表达式 根据表达式写出真值表 根据真值表的规律找出实现的规律 逻辑电路设计方法 根据需求描述找出变量和自变量,同时定义0和1的表达方式 根据变量和自变量的关系列出真值表 根据真值表列出表达式 化简表达式得到最简与或式 如果需要用与非门表示 则需要把最简与或式进行两次取反然后化简 如果需要用与或非门则 可以把最简与或式的卡诺图画出来然后取所有的0项合并 编码器 普通编码器 每次只允许一个数字送入 3位二进制普通编码器为例说明 列出真值表每次输入8位