为了账号安全,请及时绑定邮箱和手机立即绑定

ThreadLocal 中两行代码的理解

ThreadLocal 中两行代码的理解

小唯快跑啊 2019-03-15 14:15:33
在Android的ThreadLocal代码中看到了两行代码:    private static AtomicInteger hashCounter = new AtomicInteger(0);    private final int hash = hashCounter.getAndAdd(0x61c88647 * 2);对于这两行代码个人理解不好,问题在于对于同一个ThreadLocal实例,既然hash用final修饰了,那么它的值应该是固定的,而且第一个实例的hash变量应该为0才对。这个理解对吗?但是个人调试了下,发现这个对于同一个ThreadLocal实例,这个值有可能发生变化(我是在使用set函数然后在断点打进去看的)。另外,这个值应该是用于计算散列码,这么写不会有问题么?
查看完整描述

1 回答

?
梦里花落0921

TA贡献1772条经验 获得超6个赞

变量hash由于是final的,所以一旦被赋值,其值之后都不会改变。

由于hash的值取决于hashCounter,所以hash的值有可能不一样,取决于为hash赋值之前,hashCounter是否已经调用过类似于increment或者add或者set方法。


查看完整回答
反对 回复 2019-04-20
  • 1 回答
  • 0 关注
  • 314 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信