如果一个状体变量是线程安全的,并且没有任何不变性条件来约束它的值,在变量的操作上也不存在任何不允许的状态转换,那么久可以安全的发布这个变量
//线程安全可变的Point类
public class SafePoint{
private int x ,y;
private SafePoint(int[] a){this(a[0],a[1]);}
public SafePoint(SafePoint p){
this(p.get());
}
public SafePoint(int x,int y){
this.x = x;
this.y = y;
}
public synchronized int[] get(){
return new int[]{x,y};
}
public synchronized void set(int x,int y){
this.x = x;
this.y = y;
}
}
//安全发布状态
public class PublishingVehicleTracker{
private final Map<String,SafePoint> locations;
private final Map<String,SafePoint> unmodifiableMap;
public PublishingVehicleTracker(Map<String,SafePoint> locations){
this.locations = new ConcurrentHashMap<String,SafePoint>(locations);
this.unmodifiableMap = Collections.unmodifiableMap(this.locations);
}
public Map<String,SafePoint> getLocations(){
return unmodifiableMap;
}
public SafePoint getLocation(String id){
return locations.get(id);
}
public void setLocation(String id,int x, int y){
if(!locations.containsKey(id)){
throw new IllegalArgumentException("invalid vehicle name: "+id);
}
locations.get(id).set(x,y);
}
}