设计模式之不变模式

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

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

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

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

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

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

  • 去除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;
    }
}

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李景琰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值