bug报告:[JDK-8161372] ConcurrentHashMap.computeIfAbsent(k,f) locks bin when k present - Java Bug Systemhttps://bugs.openjdk.java.net/browse/JDK-8161372mybatis issue
https://github.com/mybatis/mybatis-3/issues/1929
一句话说明:mybatis包括mybatis-plus会对实体类的字段映射保留一个缓存,缓存方式是存入concurrentHashMap中,使用了computeIfAbsent方法。这个方法会导致其中的Function无论key是否存在都会执行。并且,这个方法不像想象中那样不加锁的,其方法内部是加了锁的。所以,一旦Function执行时间稍微长一点,并发量稍微多点。这个地方就会成为阻塞瓶颈。确认这是一个jdk的bug,jdk9中进行了修复。mybatis在后续版本中修复了,mybatis-plus在3.4.0后修复了。如果有类似生产阻塞问题,数据库压力不大,应用cpu压力不大,但是就是有接口超时问题,可以考虑先排查mybatis版本。