欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 社会 > 并发编程中的对象组合的哲学

并发编程中的对象组合的哲学

2025/12/14 9:45:56 来源:https://blog.csdn.net/shark_chili3007/article/details/104024712  浏览:    关键词:并发编程中的对象组合的哲学

文章目录

    • 引言
    • 对象组合与安全委托
      • 实例封闭技术
      • 基于监视器模式的对象访问
      • 对象不可变性简化委托
      • 原子维度的访问
    • 现有容器的并发安全的封装哲学
      • 使用继承
      • 使用组合
    • 小结
    • 参考

引言

本文将介绍通过封装技术,保证开发者不对整个程序进行分析的情况下,就可以明确一个类是否是线程安全的,即一种对象组合的哲学。

对象组合与安全委托

实例封闭技术

利用合适的组合将访问对象封闭,同时使用合适的锁将访问限制,即可确保对象访问时是安全且一致的,就像下面这段代码,我们将map实例封闭用final保证域的不可变,对外发布的读写操作保证容器的操作一致和安全,注意笔者强调的是容器map的安全,object发布出去之后可能在并发操作情况下还是存在线程安全问题,如果对于obj访问需要保证安全,建议用final修饰一下内部的成员字段:

	//实例封闭在内部初始化,且不对外发布private final Map<String, Object> map = new HashMap<String, Object>();//读写采用一致维度的锁进行互斥public synchronized void put(String key, Object object) {map.put(key, object);}public synchronized Object get(String key) {return map.get(key);}

基于监视器模式的对象访问

从线程封闭原则及逻辑推论可以得出java监视器模式,对于并发操作下的对象读访问,我们可以采用监视器模式将可变状态封装,整体思路为:

  1. 将需要管理的实例封闭
  2. 使用final保证容器安全的初始化
  3. 封闭实例只读操作
  4. 屏蔽所有容器的管理操作
  5. 所有线程的访问仅仅返回拷贝对象

对应的代码如下所示:

 //final修饰保证list安全初始化private final List<Person> list ;public Obj(List<Person> list) {//使用不可变方法为容器做好安全兜底this.list = Collections.unmodifiableList(list);}public synchronized void 

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词