Java并发编程实战学习笔记 第四章 对象的组合

一、设计线程安全的类

在设计线程安全的类的过程中,需要包含三个基本要素:

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

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

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

1、收集同步需求

要确保类的线程安全性,就需要确保他的不变性条件不会在并发访问的情况下被破坏,这就需要对其状态进行推断。

如果不了解对象的不变性条件与后验条件,那么就不能确保线程安全性。要满足在状态变量的有效值或状态转换上的各种约束条件,就需要借助于原子性与封装性。

1.依赖状态的操作

类的不变性条件与后验条件约束了在对象上有那些状态转换是有效的。

2.状态的所有权

所有权与封装性总是相关联的:对象封装他拥有的状态,反之也成立,即对他封装的状态拥有所有权。

二、实例封闭

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

实例封闭式构建线程安全的一个最简单的方式,它还使得在锁策略的选择上拥有了更多的灵活性。

封闭机制更容易构造线程安全的类,因为当封闭类的状态时,在分析类的线程安全性时就无需检查整个程序。

1.java监视器模式

从线程封闭原则及其逻辑推论可以得出java监视器模式,遵循java监视器模式的对象会把对象的所有可变状态都封装起来,并由对象自己的内置锁来保护。

三、现场安全性的委托

1.独立的状态变量

将线程的安全性委托给多个状态变量,只要这些变量时彼此独立的,即组合而成的类并不会在其包含的多个状态变量上增加任何不变性条件。

如果一个类是由多个独立且线程安全的状态变量组成,并且在所有的操作中都不包含无效状态转换,那么可以将线程安全性委托给底层的状态变量。

2.发布底层的状态变量

如果一个状态边变量是线程安全的,并且没有任何不变性条件来约束他的值,在变量的操作上也不存在任何不允许的状态转换,那么就可以安全的发布这个变量。

四、在现有的线程安全类中添加功能

java类库中包含许多有用的基础模块类,应该优先选择重用现有的类,而不是创建新的类,重用能够降低开发的工作量、开发风险以及维护成本。

1.客户端加锁机制

客户端加锁,是指对于使用某个对象的X的客户端代码,使用X本身用于保护器状态的锁来保护这段客户端代码,要使用客户端加锁,就必须知道对象X使用的是那一个锁。

客户端加锁机制与扩展类机制有许多共同点,二者都是将派生类的行为与基类的行为耦合在一起。

2.组合

当为现有类添加一个原子性操作时,有一种更好的方法:组合。使用java监视器模式来封装现有的类,并且值要在雷中拥有指向底层的类的唯一外部引用,就能确保线程安全性。

五、将同步策略文档化

在文档中说明客户端代码需要了解的线程安全性保证,以及代码维护人员需要了解的同步策略。

synchronized、volatile或者任何一个线程安全类都对应某种同步策略,用于在并发访问时确保数据的完整性,这种策略是程序设计的要素之一,因此将其文档化。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
嗨!很高兴回答你关于Java并发编程的问题。请问你想知道什么方面的内容呢?我可以分享一些学习笔记和建议给你。 1. 并发编程基础:了解并发编程的基本概念,如线程、进程、锁、同步等。学习Java中的并发编程模型以及相关的API,如Thread、Runnable、Lock、Condition等。 2. 线程安全性:学习如何保证多线程环境下的数据安全性,了解共享资源的问题以及如何使用同步机制来防止数据竞争和并发问题。 3. 线程间的通信:掌握线程间的通信方式,如使用wait/notify机制、Lock/Condition等来实现线程的协调与通信。 4. 并发容器:学习并发容器的使用,如ConcurrentHashMap、ConcurrentLinkedQueue等。了解它们的实现原理以及在多线程环境下的性能特点。 5. 并发工具类:熟悉Java提供的并发工具类,如CountDownLatch、CyclicBarrier、Semaphore等,它们可以帮助你更方便地实现线程间的协作。 6. 并发编程模式:学习一些常见的并发编程模式,如生产者-消费者模式、读者-写者模式、线程池模式等。了解这些模式的应用场景和实现方式。 7. 性能优化与调试:学习如何分析和调试多线程程序的性能问题,了解一些性能优化的技巧和工具,如使用线程池、减少锁竞争、避免死锁等。 这些只是一些基本的学习笔记和建议,Java并发编程是一个庞大而复杂的领域,需要不断的实践和深入学习才能掌握。希望对你有所帮助!如果你有更具体的问题,欢迎继续提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值