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

设计模式之不变模式

在并行软件开发过程中,同步操作是必不可少的。当多线程对同一个对象进行读写操作时,为了保证对象数据的一致性和正确性,有必要对对象进行同步操作,但同步操作对系统性能有损耗。

不变模式可以去除这些同步操作,提高并行程序性能,确保其在没有同步操作的多线程环境中保持内部状态的一致性鄂汇正确性。

不变模式的主要使用场景需要满足如下两个条件:

  • 当对象创建后,其内部状态和数据不再发生任何变化。

  • 对象需要被共享,被多线程频繁访问。

为确保对象被创建后,不发生任何改变,并保证不变模式正常工作,需要注意四点:

  • 去除setter方法及所有修改自身属性的方法。

  • 将所有属性设置为私有,并用final标记,确保其不可修改。

  • 确保没有子类可以重载修改它的行为。

  • 有一个可以创建完整对象的构造方法。

/**
 * @author lyonardo
 * @Description 不变模式
 * @createTime 2020年01月11日 11:41:00
 */
public final class Product {//确保物资类
    private final String no;//私有属性,不会被其他对象获取
    private final String name;//final保证属性不会被两次赋值
    private final double price;
    //创建对象时,必须指定数据;因为创建后,无法尽心修改
    public Product(String no, String name, double price) {
        this.no = no;
        this.name = name;
        this.price = price;
    }

    public String getNo() {
        return no;
    }

    public String getName() {
        return name;
    }

    public double getPrice() {
        return price;
    }
}

注意:不变模式通过回避问题而不是解决问题的态度处理多线程并发访问控制,不变对象不需要进行同步操作。由于并发同步会对性能产生不良影响,因此,在需求允许的情况下,不变模式可以提高系统的并发性能和并发量。

相关文章:

  • 【LeetCode】33. 搜索旋转排序数组、1290. 二进制链表转整数
  • HTTPS协议之SSL/TLS详解(下)
  • 2023金三银四常见Handler面试总结,附带答案
  • DML 添加、修改、删除数据
  • [ROC-RK3568-PC] [Firefly-Android] 10min带你了解I2C的使用
  • Shell编程:轻松掌握入门级Shell脚本,成为Shell高手
  • JavaScript 高级实例集合
  • 【Android -- 开源库】表格 SmartTable 的基本使用
  • 2023华为面试真题
  • 使用ControlNet 控制 Stable Diffusion
  • 【Hello Linux】命令行解释器
  • mysql无法启动服务及其他问题总结
  • SOC计算方法:卡尔曼滤波算法
  • SpringBoot 集成 elasticsearch 7.x和对应版本不一致异常信息处理
  • 【JavaEE初阶】第四节.文件操作 和 IO (下篇)
  • 【Unity3D小技巧】Unity3D中判断Animation以及Animator动画播放结束,以及动画播放结束之后执行函数
  • 【数据结构】解决顺序表题的基本方法
  • 大数据 | (三)centos7图形界面无法执行yum命令
  • 工程管理系统源码-物料管理-工程项目管理系统-建筑施工管理软件
  • 编译nacos源码问题总结
  • 天问三号开放20千克质量资源,邀国际合作开展火星探测研究
  • 纳斯达克中国金龙指数涨2.93%,金价油价大幅下挫
  • 国际乒联祝贺王励勤当选中国乒协主席并向刘国梁致谢
  • 民生访谈|电动自行车换新补贴会优化吗?今年汛期情况如何?市应急局回应
  • 瑞穗银行(中国)有限公司行长:重庆赛力斯超级工厂的智能化程度令人震惊
  • 在现代东京,便利店如何塑造了饮食潮流、生活方式和日本社会