美文网首页算法
Java基础-ThreadLocal中的中哈希算法0x61c88

Java基础-ThreadLocal中的中哈希算法0x61c88

作者: lazyguy | 来源:发表于2019-07-23 09:34 被阅读0次
 ThreadLocalMap(ThreadLocal<?> firstKey, Object firstValue) {
            table = new Entry[INITIAL_CAPACITY];
            int i = firstKey.threadLocalHashCode & (INITIAL_CAPACITY - 1);
            table[i] = new Entry(firstKey, firstValue);
            size = 1;
            setThreshold(INITIAL_CAPACITY);
 }
取模(求余)运算

在threadlocal中有一句int i = firstKey.threadLocalHashCode & (INITIAL_CAPACITY - 1);
这里的位运算的实质是去一个取模(求余)运算,决定一个key应该放在数组的哪个index上。
当取模运算中,除数是2的N次方时,既这个数用二进制表示的时候一定只有一个1,比如16,在java的Integer中的2进制实质就是
000000000000000000000000000010000
减一就是
000000000000000000000000000001111
与被除数做与运算,被除数刚好高位就被消除,只剩下低位。既比除数大,但没有超过一倍的部分被保留。这刚好是取模(求余)运算。

之所以这么做,是因为位运算的效率要远高于普通的取模运算。

为什么要用0x61c88647

这个数是Integer有符号整数的0.618倍,既黄金比例,斐波拉契数列。
使用这个比例,可以使key在数组上被更均匀的分散。至于为什么,是一个复杂的数学问题。不懂,不展开讨论。

相关文章

  • Java基础-ThreadLocal中的中哈希算法0x61c88

    取模(求余)运算 在threadlocal中有一句int i = firstKey.threadLocalHash...

  • 说唱有嘻哈 算法有哈希

    java零基础入门-高级特性篇(二) 哈希算法和HashMap 讲完了List之后,我们继续讲集合中的另外两大巨头...

  • Java Concurrency <ThreadLocal

    Java Concurrency Java中的ThreadLocal类允许您创建只能由...

  • 一致性Hash算法的随笔

    常见的哈希算法 我们以往使用哈希算法,例如 JDK 1.8 中的HashMap,插入新的key需要确定哈希树桶中的...

  • 算法系列:5分钟了解哈希算法

    前言 哈希算法是现代密码体系中的一个重要组成部分。大家比较感兴趣的数字货币,就使用了哈希算法。 哈希算法简介 哈希...

  • Android Handler机制2--ThreadLocal

    本篇文章的主要内容如下: 1、Java中的ThreadLocal2、 Android中的ThreadLocal3、...

  • java中的ThreadLocal

    ThreadLocal-面试必问深度解析https://www.jianshu.com/p/98b68c97df9...

  • java中的ThreadLocal

    ThreadLocal是一个关于创建线程局部变量的类。通常情况下,我们创建的变量是可以被任何一个线程访问并修改的。...

  • Java中的ThreadLocal

    关于 ThreadLocal,我们经常用它来解决多线程并发问题,那它究竟是如何做到的?今天就让我们来好好看一下。 ...

  • Java一些基础概念

    Java中的ThreadLocal可以将一个非线程安全的对象转换成支持多线程访问的对象。 Java 数据库基础: ...

网友评论

    本文标题:Java基础-ThreadLocal中的中哈希算法0x61c88

    本文链接:https://www.haomeiwen.com/subject/gamnlctx.html