ThreadLocal 中两行代码的理解
在Android
的ThreadLocal
代码中看到了两行代码:
private static AtomicInteger hashCounter = new AtomicInteger(0);
private final int hash = hashCounter.getAndAdd(0x61c88647 * 2);
对于这两行代码个人理解不好,问题在于对于同一个ThreadLocal
实例,既然hash
用final
修饰了,那么它的值应该是固定的,而且第一个实例的hash
变量应该为0
才对。这个理解对吗?
但是个人调试了下,发现这个对于同一个ThreadLocal
实例,这个值有可能发生变化(我是在使用set
函数然后在断点打进去看的)。另外,这个值应该是用于计算散列码,这么写不会有问题么?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
变量hash由于是final的,所以一旦被赋值,其值之后都不会改变。
由于hash的值取决于hashCounter,所以hash的值有可能不一样,取决于为hash赋值之前,hashCounter是否已经调用过类似于increment或者add或者set方法。