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

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

    private static AtomicInteger hashCounter = new AtomicInteger(0);

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

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

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

黄舟
黄舟

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

모든 응답(1)
黄舟

해시 변수는 최종 변수이므로 일단 값이 할당되면 그 값은 이후에는 변경되지 않습니다.

해쉬의 값은 hashCounter에 따라 달라지므로, 해시에 값을 할당하기 전에 hashCounter가 increment, add, set과 유사한 메소드를 호출했는지에 따라 해시의 값이 달라질 수 있습니다.

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!