java - ThreadLocal 中两行代码的理解
黄舟
黄舟 2017-04-18 09:23:06
0
1
628

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

    private static AtomicInteger hashCounter = new AtomicInteger(0);

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

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

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

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

répondre à tous(1)
黄舟

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.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal