20230320学习笔记
目录
一、HashMap的put方法
二、重载和重写的区别
三、ReenTrantLock中tryLock()和Lock()方法的区别
四、sleep、wait、join、yield
五、ThreadLocal的底层原理
六、TheadLocal内存泄漏问题,如何避免
八、说一下ThreadLocal
九、线程之间是如何通讯
总结
一、HashMap的put方法
1、首先通过hashcode 与或运算,确定下标位置。
2、1.7: a、没值的情况下,创建Entry对象;
b、有值的情况下,如何key相同,把value覆盖。
c、key不相同,若要扩容,则先扩容,再使用头插法插入Entry对象;
1.8: a、 没值的情况下,创建Node对象;
b、有值的情况下,若key相同,则覆盖value;
c、key不相同,使用尾插法添加Node对象,遍历元素后,再确认是否需要扩容。
二、重载和重写的区别
1、重写: 实现父类的方法,访问权限大于父类,返回值、异常类型小于父类,private 权限不能被 重写。
2、重载:方法名相同,参数列表不同、参数个数,参数类型,与返回值无关。
三、ReenTrantLock中tryLock()和Lock()方法的区别
四、sleep、wait、join、yield
sleep:睡眠,线程运行状态转变成可运行状态;
wait: 阻塞,等待唤醒,notify,notifyAll;
join: 唤醒主线程;
yield: 可中断;
五、ThreadLocal的底层原理
1、每个Thead对象有TheadLocalMap属性,它是ThreaLocal的内部类;
2、key值是本身且是弱引用对象。
六、TheadLocal内存泄漏问题,如何避免
1、确认完成后,有remove();
七、如何查看线程死锁
jstat