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

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

    private static AtomicInteger hashCounter = new AtomicInteger(0);

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

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

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

黄舟
黄舟

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

membalas semua(1)
黄舟

Memandangkan cincangan pembolehubah adalah muktamad, setelah ia diberikan nilai, nilainya tidak akan berubah selepas itu.

Memandangkan nilai hash bergantung pada hashCounter, nilai hash mungkin berbeza, bergantung pada sama ada hashCounter telah memanggil kaedah yang serupa dengan kenaikan, tambah atau tetapkan sebelum memberikan nilai kepada cincang.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan