HashMap用可变对象作为key踩坑
前言
在Java道路上越踩越多坑,最近被问到一个知识点,当对象作为HashMap一个key时,再未重写equals
和hashcode
方法时候,get
方法返回的值为null
。
分析
在下面一段代码中,未重写equals以及hashCode方法情况下,输出结果为null
Java线程调度
线程调度是指系统为线程分配处理器使用权的过程,方式主要有:协同式线程调度和抢占式线程调度。
协同式线程调度
线程的执行时间由线程本身来控制,线程把自己的工作执行完成之后,要主动通知系统切换到另外一个线程上。
- 好处:实现简单。且由于线程要把自己的事情干完后才会进行线程切换,切换操作对线程自己是可知。不存在线程同步问题。
- 缺点:线程执行时间不可控制,甚至如果一个线程编写有问题,一直不告知系统进行线程切换,则程序就会一直阻塞在那里。
抢占式线程调度
每个线程将由系统来分配执行时间,线程的切换不由线程本身来决定(Java中,Thread.yield()可以让出执行时间,但是要获取执行时间的话,线程本身是没有办法的)。
- 好处:线程的执行时间是系统可控的,也不会有一个线程导致整个进程阻塞的问题,Java使用的线程调度方式就是抢占式调度。