-
封闭
(1) 封装简化了线程安全类的实现过程。将数据封装在对象内部, 可以将数据的访问限制在对象的方法上, 从而更容易确保线程在访问数据时总能持有正确的锁
(2) 被封闭对象不能超出它们既定的作用域
1° 可以封闭在一个类实例中(private变量)
2° 可以封闭在某个作用域内(局部变量)
3° 封闭在线程内(只在同一个线程的不同方法内传递, 不在不同线程间传递)
-
可以使用对象的内置锁this对内部的对象进行封闭, 但是用其他的锁也可以, 只要确保使用了同一个锁。
对于不同的状态变量, 还可以使用不同的锁来增加灵活性
-
Java监视器模式
(1) 将对象的所有可变状态都封装起来, 并由对象的内置锁保护
(2) 示例
public class PrivateLock { private final Object myLock = new Object(); @GuardedBy("myLock") Widget widget; void someMethod() { synchronized (myLock) { // Access or modify the state of widget } } class Widget { } }myLock就是内置锁
(3) 优点
私有的锁可以将锁封装起来,使客户代码无法得到锁
-
装饰器模式实现线程封闭
一些基本的容器类例如ArrayList不是线程安全的, 但是可以使用装饰器模式将容器类封装在一个同步的包装器对象中,而包装器将接口中的所有方法都实现为synchronized方法, 并将调用请求转发到底层的容器对象上(例如Collections.synchronizedList)
1_基础知识_chapter04_对象的组合_2_实例封闭
最新推荐文章于 2024-11-14 21:28:19 发布
本文探讨了在多线程环境中实现线程安全的封闭技术,包括数据封装、私有锁、装饰器模式等,通过具体示例展示了如何利用这些技术简化线程安全类的实现。
834

被折叠的 条评论
为什么被折叠?



