线程并发学习四(对象的组合)

本文介绍了线程安全类的设计原则,包括确定对象状态、维护不变性条件及并发访问策略等核心概念。探讨了如何通过实例封闭和技术手段保障线程安全,并讨论了私有锁对象的使用优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

[size=large]
1.设计线程安全类的过程中,需要包含以下三个基本要素
a,找出构成对象状态的所有变量。
b,找出约束状态变量的不变性条件
c,建立对象状态的并发访问管理策略
要分析对象的状态,首先从对象的域开始,如果对象中所有的域都是基本类型的变量,那么这些域将构成对象的全部状态。

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

3.ServletContext为servlet提供了类似于Map形式的对象容器服务,在ServletContext中可以通过名称来注册或获取应用程序对象,由Servlet容器实现的ServletContext对象必须是线程安全的,因为它肯定会被多个线程同时访问。

4.实例封闭
如果某对象不是线程安全的,那么可以通过多种技术使其在多线程程序中安全使用。你可以确保该对象只能由单个线程访问(线程封闭),或者通过一个锁来保护对该对象的所有访问。
封装简化了线程安全类的实现过程,它提供了一种实力封闭机制。当一个对象被封装到另一个对象中时,能够访问被封装对象的所有代码路径都是已知的。

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


5.使用私有的锁对象而不是对象的内置锁(或者其他可通过公有方式访问的锁),有许多优点。私有的锁对象可以将锁封装起来,使客户端代码无法得到锁,但客户端代码可以通过公有方法来访问锁,以便参与到他的同步策略中。

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

[/size]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值