- 不可变类的使用
 - 不可变类的设计
 - 无状态类设计
 
问题提出
有些类是线程不安全的,即当多个线程访问该类同一个对象时,调用方法可能会产生线程不安全问题。
例如SmipleDateFormat类,其中的parse方法即无法保证线程安全。
改进方法即可以调用方法时加锁,或者改为不可变类,不可变类能够保证其中的每个方法都是线程安全的。
import java.time.format.DateTimeFormatter;import java.time.temporal.TemporalAccessor;import java.util.Date;public class TestFixed {public static void main(String[] args) {DateTimeFormatter stf = DateTimeFormatter.ofPattern("yyyy-MM-dd");for (int i=0;i<10;i++){new Thread(()->{TemporalAccessor parse = stf.parse("2013-02-21");System.out.println(parse);}).start();}}}
注意:
不可变类可以保证其中每个方法是线程安全的,但是不能够保证方法的组合是线程安全的,方法本质还是指令的组合,比如之前给BigDecimal类加AotmicReference的例子中,BigDecimal实际上是不可变类,但是当涉及对共享变量读取的时候,出现了如下的方法组合:
