对象的组合

一、设计线程安全的类

在设计线程安全类的过程中需要考虑一下要素;

  • 找出构成对象状态的所有变量
  • 找出约束状态变量的不变性条件
  • 建立对象状态的并发管理策略
  1. 构成对象状态的所有变量
    1. 如果该对象的所有域都是基本类型的变量,则这些基本类型的变量就构成了该对象的状态
    2. 如果该对象中包含引用类型的变量,则被引用对象的状态变量也一起构成该对象的状态变量

  2. 构建线程安全的类之实例封闭

  实例封闭是指将类的状态变量(基本类型或者引用类型)封装在类的内部,只是对外暴露相应的接口,并且在接口上实现同步,如果要访问该类的状态变量只能通过开放的同步接口,这样调用客户端不需要进行多余的同步代码。

  对于引用类型的状态变量,在通过公开的接口访问该状态时候,一定要注意不要把这个引用对象(如果对象是可变对象,需要复制,如果是不可变对象则不需要)逸出,通常可以通过clone()方法返回该引用的一个副本。

  (1)实例封闭之java监视器模式

    当从头构建一个线程安全的类,或者将多个非线程安全的类组合成一个线程安全的类时,java监视器模式是非常有用的,但是如果类中的各个组件已经是线程安全的,就需

  要考虑线程安全性的委托了。

    对象只有在完全初始化后,其final变量对其它线程才是可见的。这说明,final变量的初始化可以在不使用synchronization的情况下实现线程安全。这样,final变量实现了

  真正意义上的final(即,不-可-变),而不会在初始化过程中、后在多线程中看起来会改变。

  3. 线程安全性的委托
  (1)如果一个对象中只有一个线程安全的状态变量,则可以完全可以见对该状态变量的访问委托给变量本身;如果对象中有n个互相独立的线程安全的状态变量时,也可以简单

  将对变量的安全访问委托给状态变量即可。但是如果这些状态变量之间有制约关系,则可能还需要额外的同步手段。

  4. 构建线程安全的类之发布底层的状态变量

  当把一个类线程的安全性委托给底层的状态变量时,什么情况下才能发布这个状态变量使客户端代码可以修改该底层状态变量的值?

  5. 构建线程安全类之在现有的线程安全类中添加功能
  (1)客户端加锁机制
  客户端加锁是指对于使用某个对象X的客户端代码,必须使用X本身用于保护其自身状态的锁来保护这段客户端代码,才能实现真正意义上的同步和原子性。要使用客户端加锁,客户端必须知道对象X使用的是哪一个锁。
错误的客户端加锁代码:

  注意:此处客户端的同步是完全没有作用的,因为list中同步使用的锁肯定不是此处ListHelper中使用的锁。

  (2)当为现有的类添加一个原子操作时,有一种更好的方法:组合

转载于:https://www.cnblogs.com/JackDesperado/p/4779959.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 对象组合是面向对象编程中的一种设计模式,它允许一个对象包含其他对象作为其成员变量,并且可以调用这些成员对象的方法和属性。通过对象组合,我们可以将复杂的问题分解成更小的问题,每个小问题都由一个对象来解决。 对象组合可以通过多种方式实现。其中一种常见的方式是将成员对象作为构造函数的参数传递给包含对象,并在包含对象中保存对这些成员对象的引用。另一种方式是使用属性或setter方法,将成员对象动态地注入到包含对象中。 对象组合可以帮助我们实现更具可重用性和可维护性的代码。通过将功能分解成小的对象,我们可以更容易地测试和调试代码,同时也可以减少代码的耦合性,使得代码更容易扩展和修改。 ### 回答2: 6-2 对象组合-2021 是指在2021年对对象组合进行的一项工作或研究。在计算机编程中,对象组合是一种将不同的对象结合在一起形成新的对象的技术或模式。通过对象组合,可以更灵活和高效地构建和管理复杂的系统。 在2021年,对象组合的应用得到了广泛的关注和应用。有许多具体的应用场景和实例可以考虑。例如,可以将不同的数据对象组合成一个更大的数据结构,以实现更高级的数据操作和分析。又如,可以将不同的功能对象组合成一个更复杂的系统,以满足不同的业务需求。此外,还可以通过对象组合来实现代码的重用和模块化,提高开发效率和质量。 具体而言,对象组合可以通过不同的技术和模式来实现。常见的方式包括组合模式、装饰器模式、依赖注入等。通过这些方式,可以将不同的对象组合在一起,形成一个整体的对象。在组合过程中,可以灵活地添加、删除或替换对象,以满足不同的需求和变化。 总之,6-2 对象组合-2021 是指在2021年对对象组合技术的应用和研究。通过对象组合,可以更灵活和高效地构建和管理复杂的系统。对象组合可以应用于不同的领域和场景,提供了一种强大的工具和方法,用于解决实际问题。 ### 回答3: 6-2 对象组合-2021 是指在2021年进行的关于对象组合的学习或实践活动。对象组合是指将不同的对象组合在一起形成一个新的对象或实体的过程。 在对象组合-2021中,我可以想象参与者会进行一系列的学习和实践活动来加深对对象组合的理解和应用。首先,参与者可能会学习对象组合的基本概念和原理,了解如何通过组合已有的对象来创建新的对象。他们可能会研究各种对象组合的实际应用,包括软件开发中的面向对象编程、系统设计中的模块化设计等。 参与者还可以在对象组合-2021中参与实践项目,通过实际动手操作来巩固所学的知识。例如,他们可以参与一个小组项目,在其中将多个对象组合在一起创建一个新的功能或系统。这个项目可以是一个简单的软件应用程序,也可以是一个复杂的系统。通过实践项目,参与者可以学习如何在实际环境中进行对象之间的组合和协作。 此外,在对象组合-2021中,参与者还可以参加讲座、研讨会或工作坊,与其他对对象组合感兴趣的人分享和交流经验。他们可以与专家学者互动讨论,提出问题,探讨对象组合的最佳实践和挑战。这种交流和合作可以帮助参与者扩展他们的知识和网络,并获得更深入的理解和见解。 综上所述,对象组合-2021 是一个关于对象组合的学习和实践活动,参与者通过学习基本概念,参与实践项目,并与他人交流合作来提高他们的对象组合能力和知识水平。这将为他们在软件开发、系统设计等领域中应用对象组合提供有力支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值