MENU

分类 Java 下的文章

Mybatis分页插件PageHelper踩坑过程

前言

最近在整一个基于Dubbo RPC调用统一用户模块,想法是落地实践学生团队。学校学生用户这么多涉及到查询的自然需要涉及到分页查询。之前在猫眼实习时候,有看过内部使用的美团开源的美团点评集团统一使用的MySQL数据库访问层的中间件,里面还集成有数据库读写分离、分库分表、监控等等,小团队目前还没必要用到这些功能,一切从简,先把整个骨架子搭起来,因此选择PageHelper这个插件。

阅读全文

HashMap用可变对象作为key踩坑

前言

在Java道路上越踩越多坑,最近被问到一个知识点,当对象作为HashMap一个key时,再未重写equalshashcode方法时候,get方法返回的值为null

分析

在下面一段代码中,未重写equals以及hashCode方法情况下,输出结果为null

阅读全文

Java线程调度

线程调度是指系统为线程分配处理器使用权的过程,方式主要有:协同式线程调度抢占式线程调度

协同式线程调度

线程的执行时间由线程本身来控制,线程把自己的工作执行完成之后,要主动通知系统切换到另外一个线程上。

  • 好处:实现简单。且由于线程要把自己的事情干完后才会进行线程切换,切换操作对线程自己是可知。不存在线程同步问题。
  • 缺点:线程执行时间不可控制,甚至如果一个线程编写有问题,一直不告知系统进行线程切换,则程序就会一直阻塞在那里。

抢占式线程调度

每个线程将由系统来分配执行时间,线程的切换不由线程本身来决定(Java中,Thread.yield()可以让出执行时间,但是要获取执行时间的话,线程本身是没有办法的)。

  • 好处:线程的执行时间是系统可控的,也不会有一个线程导致整个进程阻塞的问题,Java使用的线程调度方式就是抢占式调度。

阅读全文