Maison  >  Questions et réponses  >  le corps du texte

java - ThreadLocal 中两行代码的理解

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

    private static AtomicInteger hashCounter = new AtomicInteger(0);

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

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

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

黄舟黄舟2717 Il y a quelques jours569

répondre à tous(1)je répondrai

  • 黄舟

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

    Le hachage de la variable étant final, une fois qu'une valeur lui est attribuée, sa valeur ne changera pas par la suite.

    Étant donné que la valeur du hachage dépend de hashCounter, la valeur du hachage peut être différente, selon que hashCounter a appelé une méthode similaire à incrémenter, ajouter ou définir avant d'attribuer une valeur au hachage.

    répondre
    0
  • Annulerrépondre