多个线程同时读写同一共享变量存在并发问题
,这里的必要条件之一是读写,如果只有读没有写,是没有并发问题的。解决并发问题,其实最简单的办法就是让共享变量只有读操作,而没有写操作。这个办法如此重要,以至于被上升到了一种解决并发问题的设计模式:不变性(Immutability)模式。所谓不变性,简单来讲,就是对象一旦被创建之后,状态就不再发生变化。就是变量一旦被赋值,就不允许修改了(没有修改操作),也就是保持了不变性。
需要注意Immutability模式的属性的不可变性
需要注意以下两点:
在使用 Immutability 模式的时候一定要确认保持不变性的边界在哪里,是否要求属性对象也具备不可变性
不可变的Person
类:
public final class Person {
private final String name;
private final int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
在这个示例中,Person
类被声明为final
,防止其他类扩展它。它有两私有的不可变字段name
和age
,它们被声明为final
,这意味着它们一旦被初始化后就不能被修改。类中只有构造函数来初始化这些字段,并且提供了获取字段值的方法,但没有提供任何可以修改字段值的方法。因此,一旦创建了Person
对象,它的状态就是不可变的,不能被改变。
这种不可变性模式有助于避免在程序中意外改变对象的状态,提高了系统的健壮性和安全性。
有错误欢迎大家指正