多个线程先后设置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线程之间可能还隔着几个线程正常执行。

上一篇 下一篇

猜你喜欢

热点阅读