iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >java中有哪些ThreadLocal核心方法
  • 158
分享到

java中有哪些ThreadLocal核心方法

2023-06-14 17:06:20 158人浏览 泡泡鱼
摘要

这篇文章将为大家详细讲解有关java中有哪些ThreadLocal核心方法,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。Java可以用来干什么Java主要应用于:1. web开发;2. An

这篇文章将为大家详细讲解有关java中有哪些ThreadLocal核心方法,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

Java可以用来干什么

Java主要应用于:1. web开发;2. Android开发;3. 客户端开发;4. 网页开发;5. 企业级应用开发;6. Java大数据开发;7.游戏开发等。

1、get()方法

(1)获取当前用的线程,并找到线程关联的threadLocalMap

(2)threadLocalMap为空则进行初始化一个新的并返回

(3)threadLocalMap不为空则根据threadlocal作为key查找Entry

(4)若Entry不为空则返回entry对应的值,否则执行第二条

public T get() {    // 获取当前线程    Thread t = Thread.currentThread();    ThreadLocalMap map = getMap(t);    //若当前线程关联的ThreadLocal不为空则查询    if (map != null) {        //根据threadLocal查询对应的Entry        ThreadLocalMap.Entry e = map.getEntry(this);        if (e != null) {            @SuppressWarnings("unchecked")            T result = (T)e.value;            return result;        }    }    return setInitialValue();}  private T setInitialValue() {     //默认返回null值     T value = initialValue();     Thread t = Thread.currentThread();     ThreadLocalMap map = getMap(t);     //如果当前调用线程关联的ThreadLocalMap为空则创建,否则设置值进去     if (map != null)         map.set(this, value);     else         //new ThreadLocalMap(this,value)         createMap(t, value);     return value; } private Entry getEntry(ThreadLocal<?> key) {    //根据key获取其在数组的下标位置    int i = key.threadLocalHashCode & (table.length - 1);    Entry e = table[i];    if (e != null && e.get() == key)        return e;    else        return getEntryAfterMiss(key, i, e);} private Entry getEntryAfterMiss(ThreadLocal<?> key, int i, Entry e) {    Entry[] tab = table;    int len = tab.length;    //数组下标的Entry不为空且关联的threadlocal与查找的threadlocal不一致    while (e != null) {        ThreadLocal<?> k = e.get();        //entry关联的threadlocal与查找的相等则直接返回        if (k == key)            return e;        if (k == null)            //关联的threadlocal为空,则触发清理key为null的Entry并重新进行rehash旧Entry数组的元素            //threadLocalMap的hash冲突与HashMap的冲突处理方式不一致,hashMap使用的是链表地址法,            //而threadLocalMap使用的开放地址法——线性探测,即顺序查找下一位置或者遍历全表,效率较低            expungeStaleEntry(i);        else            //递增下标i的值进行下一轮的查找            i = nextIndex(i, len);        e = tab[i];    }    return null;}

2、remove()方法

(1)获取当前用的线程,并找到线程关联的threadLocalMap

(2)若不为空则删除threadLocalMap中关联的值,否则啥也不做

//ThreadLocalpublic void remove() {    ThreadLocalMap m = getMap(Thread.currentThread());    if (m != null)        //删除当前threadLocal对象关联的Entry        m.remove(this);} //ThreadLocalMapprivate void remove(ThreadLocal<?> key) {    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)]) {        if (e.get() == key) {            e.clear();            expungeStaleEntry(i);            return;        }    }}

关于java中有哪些ThreadLocal核心方法就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

--结束END--

本文标题: java中有哪些ThreadLocal核心方法

本文链接: https://www.lsjlt.com/news/273887.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • java中有哪些ThreadLocal核心方法
    这篇文章将为大家详细讲解有关java中有哪些ThreadLocal核心方法,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。Java可以用来干什么Java主要应用于:1. web开发;2. An...
    99+
    2023-06-14
  • Java核心技术有哪些
    本篇内容介绍了“Java核心技术有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!  >>>***位用0填充,...
    99+
    2023-06-17
  • Java的核心技术有哪些
    本篇内容主要讲解“Java的核心技术有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java的核心技术有哪些”吧!1. JVM相关对于刚刚接触Java的人来说,JVM相关的知识不一定需要理解...
    99+
    2023-06-15
  • 有哪些Java核心面试题
    本篇内容主要讲解“有哪些Java核心面试题”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“有哪些Java核心面试题”吧!01、请说出 Java 14 版本中更新的重要功能Java 14 发布于 2...
    99+
    2023-06-16
  • Java中的ClassLoader核心知识点有哪些
    这篇文章主要介绍“Java中的ClassLoader核心知识点有哪些”,在日常操作中,相信很多人在Java中的ClassLoader核心知识点有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java中的C...
    99+
    2023-06-16
  • Hibernate中有哪些核心接口
    小编给大家分享一下Hibernate中有哪些核心接口,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!包括七大核心接口:Session接口、SessionFactor...
    99+
    2023-06-17
  • Java中ThreadLocal的作用有哪些
    这篇文章主要介绍“Java中ThreadLocal的作用有哪些”,在日常操作中,相信很多人在Java中ThreadLocal的作用有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java中ThreadLo...
    99+
    2023-06-16
  • Python有哪些核心库
    这篇文章主要介绍“Python有哪些核心库”,在日常操作中,相信很多人在Python有哪些核心库问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python有哪些核心库”的疑惑有所帮助!接下来,请跟着小编一起来...
    99+
    2023-06-16
  • Shiro核心类有哪些
    这篇文章主要讲解了“Shiro核心类有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Shiro核心类有哪些”吧!一:SessionManager简介Shiro提供了完整的会话管理功能,不...
    99+
    2023-06-02
  • jquery有哪些核心函数
    这篇文章主要讲解了“jquery有哪些核心函数”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“jquery有哪些核心函数”吧! j...
    99+
    2024-04-02
  • vue有哪些核心技术
    这篇文章给大家分享的是有关vue有哪些核心技术的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。 vue有两大核心:1、数据驱动,也就是数据的双向绑定,让...
    99+
    2024-04-02
  • node.js核心模块有哪些
    目录全局对象全局对象与全局变量processconsole常用工具util事件机制events--Events模块事件发射器error事件文件系统fs--fs模块Http 模块全局对...
    99+
    2024-04-02
  • web前端有哪三大核心方法
    这篇文章主要介绍“web前端有哪三大核心方法”,在日常操作中,相信很多人在web前端有哪三大核心方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”web前端有哪三大核心方法”...
    99+
    2024-04-02
  • es6核心特性有哪些
    本篇内容主要讲解“es6核心特性有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“es6核心特性有哪些”吧! es6核心特性有:1...
    99+
    2024-04-02
  • PHP核心架构有哪些
    这篇文章将为大家详细讲解有关PHP核心架构有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1、Zend引擎Zend是PHP内核的一部分,完全用纯C实现,它将PHP代码翻译(词法、语法解析等一系列编译过...
    99+
    2023-06-15
  • Hibernate核心接口有哪些
    这篇文章主要介绍“Hibernate核心接口有哪些”,在日常操作中,相信很多人在Hibernate核心接口有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Hibernate核心接口有哪些”的疑惑有所帮助!...
    99+
    2023-06-17
  • Hibernate有哪些核心接口
    这篇文章主要介绍Hibernate有哪些核心接口,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所...
    99+
    2023-06-17
  • java中ThreadLocal的使用场景有哪些
    今天就跟大家聊聊有关java中ThreadLocal的使用场景有哪些,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。常用的java框架有哪些1.SpringMVC,Spring Web...
    99+
    2023-06-14
  • Flume的核心组件有哪些
    Flume的核心组件包括: Source:用于接收数据并将其传输到Flume中的通道。 Channel:用于存储接收到的数据,以便...
    99+
    2024-03-07
    Flume
  • Storm的核心组件有哪些
    Storm的核心组件有以下几个: Nimbus:Nimbus是Storm集群的主节点,负责分配拓扑任务给Supervisor节点...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作