多个线程先后设置ThreadLocal可能出现的问题
2019-05-15 本文已影响0人
晨暮时代
示例代码:
// 第一步
LocalThreadUtil.setCustCode(custCode);
try{
// 第二步
Object custCode = LocalThreadUtil.getCustCode();
} finally {
// 第三步
LocalThreadUtil.removeCustCode();
}
现有A线程和B线程先后访问上诉两块代码,假设A线程设置custCode为a,B线程设置custCode为b,倘若执行正常,那么A线程在getCustCode()的时候会得到a,B线程则会得到b。
但,事情总不会每次都发展得顺利。
假设A线程由于意外而没有执行第三步,那么之前设置的custCode也就不会从ThreadLocal移除;之后执行B线程,也由于意外而没有执行第一步,这时候B线程在getCustCode()的时候却发现,得到的却是之前A线程设置的值。
打印A、B两线程,发现它们的线程ID是同一个!那么问题便很好解释了。
当然,A、B线程之间可能还隔着几个线程正常执行。