zoukankan      html  css  js  c++  java
  • 不可变对象模式(Immutable Object)

    Immutable Object模式简介

    多线程共享变量的情况下,为了保持数据的一致性,往往需要对这些变量的访问进行加锁。而锁本身又会带来一些问题和开销。Immutable Object模式使得我们可以在不使用锁的情况下,即保证共享变量访问的线程安全,又能避免引入锁可能带来的问题和开销。

    实战应用:

    共享自行车对车俩的位置信息进行追踪时:

    1 public final class Position {
    2     public final double x;
    3     public final double y;
    4 
    5     public Position(double x, double y) {
    6         this.x = x;
    7         this.y = y;
    8     }
    9 }

    使用状态不可变的位置信息模型(Position)时,如果车俩的位置发生变动,则更新车俩的位置信息是通过更新整个表示位置信息的对象来实现的

    public class VehicleTracker {
        private Map<String,Position> poMap=new ConcurrentHashMap<>();
    
        public void updatePosition(String vehicleId,Position newPosition){
            poMap.put(vehicleId,newPosition);
        }
    
        public Map<String, Position> getPoMap() {
            return poMap;
        }
    }

    这样就实现了对每辆车的位置变化进行记录,使用不可变对象,在不使用锁的情况下保证了线程的安全,每次更新车俩的坐标信息时,更新的是整个对象,既X,Y始终未一个完整的坐标,使用不可变对象不表示坐标的位置始终不变,而是我们使用状态不可变的对象来对这些实体建模

  • 相关阅读:
    visual studio2010中C#生成的,ArcGIS二次开发的basetool的dll,注册为COM组件tlb文件,并在arcmap中加载使用
    EPSG:4326
    返回mapcontrol上的已被选择的element
    设置mapcontrol的鼠标样式
    设置mapcontrol的鼠标样式
    2016年6月11日 星期六 晴
    2016年6月10日 星期五 晴
    Docker安装部署
    LVS+DR
    mysql MHA
  • 原文地址:https://www.cnblogs.com/javawan/p/6635428.html
Copyright © 2011-2022 走看看