当前位置: 首页 > news >正文

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

文章目录

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

引言

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

对象组合与安全委托

实例封闭技术

利用合适的组合将访问对象封闭,同时使用合适的锁将访问限制,即可确保对象访问时是安全且一致的,就像下面这段代码,我们将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 

相关文章:

  • Server-Driven UI:Kotlin 如何重塑动态化 Android 应用开发
  • Ubuntu部署私有Gitlab
  • 鸿蒙UI开发——实现一个上拉抽屉效果
  • 物流项目第六期(短信微服务——对接阿里云第三方短信服务JAVA代码实现、策略模式 + 工厂模式的应用)
  • 贪心算法题目合集2
  • Java异常处理全解析:从基础到自定义
  • 【Linux】C语言模拟实现shell命令行(程序替换原理)
  • Web渗透红队实战:企业级对抗的工程化突破手册
  • C++类与对象(二):六个默认构造函数(二)
  • Spark大数据分与实践笔记(第五章 HBase分布式数据库-02)
  • Python MD5加密算法脚本
  • 深入浅出IIC协议 - 从总线原理到FPGA实战开发 --第四篇:I2C工业级优化实践
  • vue调后台接口
  • 现代化SQLite的构建之旅——解析开源项目Limbo
  • 基于STM32的智能台灯_自动亮度_久坐提醒仿真设计(Proteus仿真+程序设计+设计报告+讲解视频)
  • 基于R语言地理加权回归、主成份分析、判别分析等空间异质性数据分析实践技术应用
  • JVM 与容器化部署调优实践(Docker + K8s)
  • 前端excel表格解析为json,并模仿excel显示
  • 【HarmonyOS Next之旅】DevEco Studio使用指南(二十五) -> 端云一体化开发 -> 业务介绍(二)
  • 心知天气 API 获取天气预报 2025/5/21
  • 杭州专业做网站的/自己建站的网站
  • wordpress生产静态页面/浙江企业seo推广
  • 局域网网站制作教程/口碑营销的步骤
  • 拍卖网站开发多少钱/友情链接交换系统
  • 榆垡网站建设/设计一个公司网站多少钱
  • 网站用户维度/做个网站需要多少钱