iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Java ThreadLocal有什么作用你知道吗
  • 210
分享到

Java ThreadLocal有什么作用你知道吗

2024-04-02 19:04:59 210人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

目录ThreadLocal有什么作用测试代码当前线程只能操作当前ThreadLocal定义的局部变量,其他线程是访问不了。测试结果总结ThreadLocal有什么作用 ThreadL

ThreadLocal有什么作用

ThreadLocal 的源码,可以看到源码注释中有很清楚的解释:它是线程的局部变量,这些变量只能在这个线程内被读写,在其他线程内是无法访问的。 ThreadLocal 定义的通常是与线程关联的私有静态字段(例如,用户ID或事务ID)。

ThreadLocal 是线程本地存储,在每个线程中都创建了一个 ThreadLocalMap 对象,每个线程可以访问自己内部 ThreadLocalMap 对象内的 value。通过这种方式,避免资源在多线程间共享。

经典的使用场景是为每个线程分配一个 JDBC 连接 Connection。这样就可以保证每个线程的都在各自的 Connection 上进行数据库的操作,不会出现 A 线程关了 B线程正在使用的 Connection; 还有 Session 管理 等问题。

比如用来存储用户 Session。Session 的特性很适合 ThreadLocal ,因为 Session 之前当前会话周期内有效,会话结束便销毁。我们先笼统但不正确的分析一次 WEB 请求的过程:


用户在浏览器中访问 web 页面;
浏览器向服务器发起请求;
服务器上的服务处理程序(例如Tomcat)接收请求,并开启一个线程处理请求,期间会使用到 Session ;
最后服务器将请求结果返回给客户端浏览器。

从这个简单的访问过程我们看到正好这个 Session 是在处理一个用户会话过程中产生并使用的,如果单纯的理解一个用户的一次会话对应服务端一个独立的处理线程,那用 ThreadLocal 在存储 Session ,简直是再合适不过了。

测试代码

ThreadLocal 的使用非常简单,最核心的操作就是三个:创建、赋值、取值。

当前线程只能操作当前ThreadLocal定义的局部变量,其他线程是访问不了。


public class TestThreadLocal {
    //线程本地存储变量
    private static final ThreadLocal<Integer> THREAD_LOCAL_NUM = new ThreadLocal<Integer>() {
        @Override
        protected Integer initialValue() {
            return 0;
        }
    };
    public static void main(String[] args) {
        for (int i = 0; i <3; i++) {//启动三个线程
            Thread t = new Thread() {
                @Override
                public void run() {
                    add10ByThreadLocal();
                }
            };
            t.start();
        }
    }
    
    private static void add10ByThreadLocal() {
        for (int i = 0; i <5; i++) {
            Integer n = THREAD_LOCAL_NUM.get();
            n += 1;
            THREAD_LOCAL_NUM.set(n);
            System.out.println(Thread.currentThread().getName() + " : ThreadLocal num=" + n);
        }
    }
}

测试结果

答案:三个线程最终输出是5,代表一个线程 执行代码循环五次每次+1结果是5 在同一个线程内, 三个线程最终结果 并不是15,从而得出结论ThreadLocal接线程的局部变量。

在这里插入图片描述

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注编程网的更多内容!

--结束END--

本文标题: Java ThreadLocal有什么作用你知道吗

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

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

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

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

下载Word文档
猜你喜欢
  • Java ThreadLocal有什么作用你知道吗
    目录ThreadLocal有什么作用测试代码当前线程只能操作当前ThreadLocal定义的局部变量,其他线程是访问不了。测试结果总结ThreadLocal有什么作用 ThreadL...
    99+
    2024-04-02
  • Java的springcloud Sentinel是什么你知道吗
    目录Sentinel 是什么?概述Sentinel 的历史:历史Sentinel 分为两个部分:两部分基本概念及作用基本概念:主要作用:Sleuth概述zipkin分布式监控客户端基...
    99+
    2024-04-02
  • 你知道Java的这些骚操作吗?
    目录一、try with catch二、instance of三、不定项参数 ...四、跳出多层循环的label五、方法引用总结一、try with catch 还记得这样的代码吗?...
    99+
    2024-04-02
  • Java为什么占用四个字节你知道吗
    目录简单了解计算机为什么要采用二进制表示信息:二进制位分析那么为什么int就占了4个字节呢?问:所有的int都是占四个字节吗?总结简单了解计算机为什么要采用二进制表示信息: 因为计算...
    99+
    2024-04-02
  • Java和NumPy:你知道它们之间有什么联系吗?
    在当今数据时代,数据科学家和开发者们通常使用多种编程语言来完成各种任务。而Java和Python是最流行的编程语言之一。Java是一种高级编程语言,主要用于构建企业级应用程序。而Python则是一种功能强大的编程语言,主要用于数据科学和人...
    99+
    2023-10-09
    numpy 日志 npm
  • 你真的知道 JavaScript 在 Java 容器中的作用吗?
    JavaScript 和 Java 是两种不同的编程语言,它们的用途和应用场景也不尽相同。但是,在 Java 容器中,JavaScript 也有着不可替代的作用。 JavaScript 是一种脚本语言,它最初是为了在网页中实现交互效果而开发...
    99+
    2023-09-12
    容器 git javascript
  • python怎么使用xlwt操作excel你知道吗
    目录总结一、安装 pip install xlwt 二、创建表格并写入 import xlwt # 创建一个workbook并设置编码 workbook = xlwt.Workboo...
    99+
    2024-04-02
  • 你真的知道什么是arguments吗
    是的,arguments 是一个特殊的 JavaScript 对象,它包含了函数被调用时传递给函数的所有参数。它类似于一个数组,可以...
    99+
    2023-09-21
    arguments
  • Java Springboot的目的你知道吗
    目录Spring-boot目的Spring如何简化开发第一个spring-boot程序总结Spring-boot目的 Spring是为了解决企业应用开发的复杂性而创建的,简化开发 S...
    99+
    2024-04-02
  • 你知道吗?Java对象文件响应的工作原理是什么?
    Java是一种广泛使用的编程语言,它的对象文件响应机制是Java程序的重要组成部分。本文将深入探讨Java对象文件响应的工作原理,并提供演示代码,让读者对此有更深入的了解。 首先,让我们来了解一下Java中的对象文件。在Java中,对象文件...
    99+
    2023-09-10
    对象 文件 响应
  • Java Spring @Autowired的这些骚操作,你都知道吗
    目录前言1. @Autowired的默认装配2. 相同类型的对象不只一个时3. @Qualifier和@Primary4. @Autowired的使用范围4.1 成员变量4.2 构造...
    99+
    2024-04-02
  • 你知道NumPy如何与Java API协同工作吗?
    NumPy是一款在Python中使用的重要的数学计算库,而Java API是一个基于Java语言的应用程序接口。在很多情况下,我们需要将这两个工具协同工作,以便实现更加高效和精确的计算。在本文中,我们将介绍NumPy与Java API的协同...
    99+
    2023-07-31
    api 开发技术 numpy
  • Java中ThreadLocal有什么用
    这篇文章将为大家详细讲解有关Java中ThreadLocal有什么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、ThreadLocal简介多线程访问同一个共享变量的时候容易出现并发问题,特别是多个线...
    99+
    2023-06-15
  • 什么是Java布隆过滤器?如何使用你知道吗
    目录一、布隆过滤器简介二、布隆过滤器的结构三、布隆过滤器应用四、布隆过滤器的优缺点五、布隆过滤器实战六、总结Redis缓存穿透可以通过布隆过滤器进行解决,那么什么是布隆过滤器呢?请往...
    99+
    2024-04-02
  • JavaScript的原型是什么你知道吗
    目录先看三个对象一、构造函数(对象): 二、实例对象三、原型对象:再看三个属性:一、prototype:二、__proto__三、constructor属性原型链总结:先看...
    99+
    2024-04-02
  • JAVA语法糖原理你知道吗
    目录Java语法糖1.基本概念1.1语法糖1.2解语法糖2.常见糖块2.1 switch 支持 String 与枚举2.2泛型2.3自动装箱与拆箱2.4方法变长参数2.5枚举2.6条...
    99+
    2024-04-02
  • 你知道Java IDE中如何优化数组操作吗?
    Java作为一种广泛使用的编程语言,数组是程序中常见的数据结构之一。在Java IDE中,优化数组操作可以提高程序的性能和效率,使程序更加稳定和可靠。本文将介绍一些优化数组操作的方法和技巧,帮助Java开发者更好地使用数组。 一、使用增强f...
    99+
    2023-09-19
    ide 数组 npm
  • java string对象上的操作,常见的用法你知道吗
    目录stringstring对象上的操作 1.判断是否为空2.size()/length(); 3.s[n]4.s1+s25.s1 = s26.s1 == s27...
    99+
    2024-04-02
  • 你知道jdk竟有4个random吗
    我们从jdk8说起。主要是四个随机数生成器。神马?有四个? 接下来我们简单说下这几个类的使用场景,来了解其中的细微差别,和api设计者的良苦用心。 java.util.Random...
    99+
    2024-04-02
  • 你知道吗?Java和Django可以一起使用!
    当我们谈论编程语言时,Java和Python是两个最受欢迎的选择。Java是用于构建企业级应用程序的强大语言,而Python是一种易于学习且灵活的语言,用于数据科学、人工智能和网络开发。然而,很少有人知道Java和Python可以结合使用,...
    99+
    2023-07-19
    django bash spring
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作