一、案例分析

1、一辆车的坐标位置 x= 1.0 ,y= 1.0
2、线程1调用更新方法,x = 2.0 , y =2.0 ,线程1只来得及 更新x值,未更新y
3、线程2读取车辆位置信息,得到结果是 x =2.0 , y = 1.0

二、实现一个不可变类

1、定义

一个对象一经创建就不再改变

2、实现思路

  • 使用final关键字修饰所有成员变量,避免其被修改,也可以保证多线程环境下被final关键字修饰的变量所引用的对象的初始化安全,即final修饰的字段在其他线程可见时,必定是初始化完成的。
  • 使用private修饰所有成员变量,可以防止子类及其他地方通过引用直接修改变量值。
  • 禁止提供修改内部状态的公开接口(比如我们前面例子中的setXY方法)
  • 禁止不可变类被外部继承,防止子类改变其定义的方法的行为。
  • 如果类中存在数组或集合,在提供给外部访问之前需要做防御性复制