线程池里的线程会被反复借用,ThreadLocal 不清干净,下一个请求就读到别人的数据。
保存用户上下文的写法要包在 try 里,finally 中调用 remove 释放。
排查时看是不是请求间串号、且只在复用线程的服务上出现,就能确认。
private static final ThreadLocal<UserCtx> CTX = new ThreadLocal<>();
try {
CTX.set(user);
doBusiness();
} finally {
// 线程池场景必须清,否则下个任务读到上一个用户
CTX.remove();
}
THE END






暂无评论内容