1.为什么重新equals为什么要从写hashcode 例如往map中放不仅比较值还比较hashcode。假如new user(1,小明) new user(1,小明) 两个是同一个人,但是如果不重写hashcode的话这两的hashcode不同,比较的话则不相当,放在map中就成两人了
2.String str = "abc" 和String str = new String("abc") 不相等 intern方法将new出来的字符串假如常量池
3.cas 解决方案 AtomicStampedReference 里面维护了一个类似于版本号的变量
3.多个值cas解决方案 AtomicReference 对对象的引用
4.hashmap 转红黑树的条件,以及红黑树转链表条件 转红黑树table数组长度大于64并且node长度大于8 红黑树转node,node长度小于6
5.new object()都做了哪些事 1.看当前new 的对象加载没,如果没有加载则进行加载。2.申请内存,此时成员变量赋初始值。3.调用构造方法给成员变量赋值。4.关联引用
6.ReentrantLock 实现原理 可重入原理,公平锁原理
实现原理:获取锁(一个volatile修饰的state表示锁状态),如果获取不到就在排队队列中增加一个排队节点。然后进入抢占模式。等待持有锁的线程调用unlock唤醒对列的头节点
可重入原理:申请锁时判断当前持有锁的线程是否时当前线程,是的话直接获取,不是的话排队,注意重入几次需要释放几次锁
公平锁实现原理:比非公平锁多了一个(hasQueuedPredecessors判断),判断当前节点在同步队列中有没有前驱节点。有的话说明 有。 比当前线程更早的排队线程,所以当前线程排队,如果没有的话则获取锁
7.锁实现原理
synchronized 根据monitor来实现的,当获取锁时判断monitor是否为0,为0则获取,不为零则排队。
8.对像头都存有哪些数据? 对像的hashcode,gc的分代信息,锁信息,锁的标识位,是否偏向锁,持有偏向锁的线程id