一些整理

看了《java并发编程实战》确实有一些可以梳理,也可以通过jdk的源码得到答案。

  • java voliate关键字与指令重排序

    缓存一致性问题和指令重排序的问题解释1,解释2

  • hashmap的实现另一个

  • concurrenthashmap的实现

  • copyonwrite,写时复制,读时不加锁,所以读可能是旧值,只保证最终一致性,不能保证数据的实时一致性,适合读多写少的并发场景
  • java内存泄露:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    //person 利用名字,年龄等属性重写了hashcode方法
    HashSet<Person> hs=new HashSet<Person>();
    Person p=new Person("张三",25);
    p.setAge(10);
    hs.remove(p);
    //这里会无法删除,修改属性后hashcode变了,也就无法找到并删除这个对象了
    //-----或者想下面这样--------
    Map map = new HashMap();
    //key未重写hashcode和equal方法
    //直接这样增加的话,没有new Key()的这样引用,永远无法取出来和移除这个键值对
    map.put(new Key("key"), "value");