ThreadLocal源码,骚气的for循环

简介: ThreadLocal源码,骚气的for循环

一 ThreadLocal set方法分析

   private void set(ThreadLocal key, Object value) {

    // We don't use a fast path as with get() because it is at
    // least as common to use set() to create new entries as
    // it is to replace existing ones, in which case, a fast
    // path would fail more often than not.

    Entry[] tab = table;
    int len = tab.length;
    int i = key.threadLocalHashCode & (len-1);

    for (Entry e = tab[i];
         e != null;
         e = tab[i = nextIndex(i, len)]) {
        ThreadLocal k = e.get();

        if (k == key) {
            e.value = value;
            return;
        }

        if (k == null) {
            replaceStaleEntry(key, value, i);
            return;
        }
    }

    tab[i] = new Entry(key, value);
    int sz = ++size;
    if (!cleanSomeSlots(i, sz) && sz >= threshold)
        rehash();
}

这里面有一个for循环,很骚气,for循环不是应该for(int i=0;i<list.size();i++)吗? 或者是foreach的写法吗?

for (Entry e = tab[i];
     e != null;
     e = tab[i = nextIndex(i, len)])
     

就是这段骚气的for循环,仔细看了一下,这段代码其实就是for循环的基础变种,意思就是如果e!=null时就会一直执行下去Entry e = tab[i]是初始值,相当与i =0,e = tab[i = nextIndex(i, len)] 是一个变化的值,相当于i++。

二 结语

源码的阅读不是一蹴而就的,而是需要不断的循序渐进,如果太过着急,就一定会适得其反。

相关文章
|
8月前
|
存储 Java Spring
ThreadLocal用法
ThreadLocal用法
62 0
|
8月前
|
存储 安全 Java
面试题:用过ThreadLocal吗?ThreadLocal是在哪个包下的?看过ThreadLocal源码吗?讲一下ThreadLocal的get和put是怎么实现的?
字节面试题:用过ThreadLocal吗?ThreadLocal是在哪个包下的?看过ThreadLocal源码吗?讲一下ThreadLocal的get和put是怎么实现的?
95 0
|
6月前
|
存储 算法 Java
ThreadLocal 源码浅析
【7月更文挑战第5天】`ThreadLocal` 是Java中用于创建线程局部变量的工具类,确保每个线程拥有独立的变量副本。源码中,每个`ThreadLocal`实例都有一个唯一的哈希码用于映射到`ThreadLocalMap`,这个内部静态类使用弱引用存储键(`ThreadLocal`实例)以防止内存泄漏。`ThreadLocalMap`使用 Entry 数组,Entry 是一个扩展了 WeakReference 的类,持有线程变量值。`ThreadLocal`的`get()`和`set()`方法通过哈希计算定位并访问或设置线程局部变量。
|
8月前
|
Java
Synchronized实现原理(方法代码块)
Synchronized实现原理(方法代码块)
73 0
|
Java 编译器
复习篇【类的构造方法与代码块的执行】
复习篇【类的构造方法与代码块的执行】
复习篇【类的构造方法与代码块的执行】
|
存储 安全 Java
|
Java 数据库
ThreadLocal的使用和坑点
ThreadLocal的使用和坑点
208 0
|
存储 Java C++
死磕synchronized一:synchronized修饰的方法的执行
近期准备写一个专栏:从Hotspot源码角度剖析synchronized。前前后后大概有10篇,会全网发,写完后整理成电子书放公众号供大家下载。对本专栏感兴趣的、希望彻彻底底学明白synchronized的小伙伴可以关注一波。电子书整理好了会通过公众号群发告知大家。我的公众号:硬核子牙。
165 0
死磕synchronized一:synchronized修饰的方法的执行
|
安全 Java 关系型数据库
大神们是怎么使用ThreadLocal的?
这篇文章是关于ThreadLocal的第三篇文章。本文将挑选一些主流的Java开源框架,从源码上分析,大神们是如何使用ThreadLocal的,学习他们的设计思想。
199 0
|
前端开发 Java 程序员
彻底读懂ThreadLocal与Synchronized区别(代码案例详解)
📝本篇用案例代码带初学者彻底读懂ThreadLocal与Synchronized区别!
173 0
彻底读懂ThreadLocal与Synchronized区别(代码案例详解)

热门文章

最新文章

下一篇
开通oss服务