zoukankan      html  css  js  c++  java
  • 对象组合

        安全组件组合模式,是一个类更容易成为线程安全的,并且在维护过程中不会无意中破坏类的安全性保证。

     1设计线程安全的类

      设计线程安全类 包含的三要素

        找出构成对象状态的所有变量

        找出约束状态变量的不变性条件

        建立对象状态的并发访问管理策略
      

      关键词:  对象状态      不变性条件      并发访问管理策略
        

      1.1  收集同步需求

        1.确保不变性条件 不会在并发访问的情况下被破坏(counter 封装   复合操作)

        2.后验条件判断判断状态迁移是否有效

        3.实现后验条件和不变性条件的约束,需要额外的同步与封装

      1.2 依赖状态操作

        先验条件

        例子:队列为空不能删除  

        并发,先验条件可能为真

      1.3  状态所有权
        并发访问一个对象时避免产生相互干扰:  线程安全对象,事实不可变对象,有锁来保护的对象

      2.实例封闭

        对象不是线程安全的,你可以确保该对象只能由单个线程访问,或者通过一个锁来保护对该对象的所有访问。

      封闭在类的一个实例(作为一个私有成员)

      封闭在某个作用域(作为一个成员变量)

      

       

      Person类如果是可变的,需要额外的同步。
        

      2.1 Java监视器模式

        一种约定:对于任何一种锁对象,只要自始至终都使用该锁对象,都可以用来保护对象的状态。

        

        2.2 车辆追踪示例

     3.线程安全性的委托

        

      多个线程安全的组件组合成的一个类,是线程安全的么?

      3.1车辆追踪器

       

      

      

     3.2  独立状态变量

       变量之间不存在不可变条件

  • 相关阅读:
    MySQL解压版安装及使用
    bitmap海量数据的快速查找和去重
    docker折腾笔记
    #ST表,单调栈#洛谷 5648 Mivik的神力
    #矩阵树定理,高斯消元,容斥定理#洛谷 4336 [SHOI2016]黑暗前的幻想乡
    #割点,Tarjan#洛谷 5058 [ZJOI2004]嗅探器
    #树状数组#洛谷 5677 [GZOI2017]配对统计
    #2-sat,Tarjan#洛谷 4171 [JSOI2010]满汉全席
    #Splay#洛谷 1486 [NOI2004]郁闷的出纳员
    #扫描线,线段树#洛谷 3875 [TJOI2010]被污染的河流
  • 原文地址:https://www.cnblogs.com/maxm/p/10880035.html
Copyright © 2011-2022 走看看