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

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

文章目录

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

引言

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

对象组合与安全委托

实例封闭技术

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

相关文章:

  • Spring Boot接口通用返回值设计与实现最佳实践
  • 破解充电安全难题:智能终端的多重防护体系构建
  • java面试每日一背 day1
  • 分布式集群中的共识算法及其在时序数据库IoTDB中的应用
  • [250521] DBeaver 25.0.5 发布:SQL 编辑器、导航器全面升级,新增 Kingbase 支持!
  • AI 模型高效化:推理加速与训练优化的技术原理与理论解析
  • Java多线程随笔
  • 03-Web后端基础(Maven基础)
  • C#实现自己的MCP Client
  • CSS、SCSS 和 SASS 的语法差异
  • 将VMware上的虚拟机和当前电脑上的Wifi网卡处在同一个局域网下,实现同一个局域网下实现共享
  • 07SpringMVC底层形象解析
  • 2022年下半年信息系统项目管理师——综合知识真题及答案(5)
  • 使用Vite创建一个动态网页的前端项目
  • 1.0 Epson数据类型以及函数的传值与传址
  • 微信小程序中,解决lottie动画在真机不显示的问题
  • CSDN gitcode代码推送
  • 博主总结框架
  • RISC-V 开发板 MUSE Pi Pro CSI测试,一把点亮ov5647摄像头
  • R语言学习--Day05--绘图技巧
  • .NET外挂系列:5. harmony 中补丁参数的有趣玩法(下)
  • 野火鲁班猫(arrch64架构debian)从零实现用MobileFaceNet算法进行实时人脸识别(四)安装RKNN Toolkit Lite2
  • IP地址详解
  • vue调后台接口
  • 【5.19-5.26学习周报】
  • RPA浪潮来袭,职业竞争的新风口已至?
  • HOT100(二叉树)
  • 大语言模型 16 - Manus 超强智能体 Prompt分析 原理分析 包含工具列表分析
  • Python数据库编程案例
  • 2022CCPC吉林省赛长春邀请赛 Java 做题记录