首頁  >  問答  >  主體

java - ThreadLocal 中两行代码的理解

AndroidThreadLocal代码中看到了两行代码:

    private static AtomicInteger hashCounter = new AtomicInteger(0);

    private final int hash = hashCounter.getAndAdd(0x61c88647 * 2);

对于这两行代码个人理解不好,问题在于对于同一个ThreadLocal实例,既然hashfinal修饰了,那么它的值应该是固定的,而且第一个实例的hash变量应该为0才对。这个理解对吗?

但是个人调试了下,发现这个对于同一个ThreadLocal实例,这个值有可能发生变化(我是在使用set函数然后在断点打进去看的)。另外,这个值应该是用于计算散列码,这么写不会有问题么?

黄舟黄舟2765 天前604

全部回覆(1)我來回復

  • 黄舟

    黄舟2017-04-18 09:25:06

    變數hash由於是final的,所以一旦被賦值,其值之後都不會改變。

    由於hash的值取決於hashCounter,所以hash的值有可能不一樣,取決於為hash賦值之前,hashCounter是否已經呼叫過類似increment或add或者set方法。

    回覆
    0
  • 取消回覆