目录
三、ReenTrantLock中tryLock()和Lock()方法的区别
一、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();
七、如何查看线程死锁
jstack pid;
show engine innodb status;
八、说一下ThreadLocal
1、基于线程本地存储的机制;
2、Thread的变量ThreadLocalMap,是ThreadLocal的静态内部类,entry 是采用弱引用,当key是个弱引用指向的是本身,当本身被回收,key如果作为强引用,就没办法被回收;
3、使用完成后要remove();
4、
九、线程之间是如何通讯
多线程的通讯都是基于内存共存(wait,notify),网络。