iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >ThreadLocal的几种误区分别是什么
  • 518
分享到

ThreadLocal的几种误区分别是什么

2023-06-17 12:06:23 518人浏览 泡泡鱼
摘要

这期内容当中小编将会给大家带来有关ThreadLocal的几种误区分别是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。jdk 1.2的版本中就提供java.lang.ThreadLocal,Threa

这期内容当中小编将会给大家带来有关ThreadLocal的几种误区分别是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

jdk 1.2的版本中就提供java.lang.ThreadLocal,ThreadLocal为解决多线程程序的并发问题提供了一种新的思路。使用这个工具类可以很简洁地编写出优美的多线程程序,ThreadLocal并不是一个Thread,而是Thread的局部变量。

最近由于需要用到ThreadLocal,在网上搜索了一些相关资料,发现对ThreadLocal经常会有下面几种误解。

一、ThreadLocal是java线程的一个实现

ThreadLocal的确是和java线程有关,不过它并不是java线程的一个实现,它只是用来维护本地变量。针对每个线程,提供自己的变量版本,主要是为了避免线程冲突,每个线程维护自己的版本。彼此独立,修改不会影响到对方。

二、ThreadLocal是相对于每个session的

ThreadLocal顾名思义,是针对线程。在JAVA WEB编程上,每个用户从开始到会话结束,都有自己的一个session标识。但是ThreadLocal并不是在会话层上。其实,Threadlocal是独立于用户session的。它是一种服务器端行为,当服务器每生成一个新的线程时,就会维护自己的ThreadLocal。

对于这个误解,个人认为应该是开发人员在本地基于一些应用服务器测试的结果。众所周知,一般的应用服务器都会维护一套线程池,也就是说,对于每次访问,并不一定就新生成一个线程。而是自己有一个线程缓存池。对于访问,先从缓存池里面找到已有的线程,如果已经用光,才去新生成新的线程。

所以,由于开发人员自己在测试时,一般只有他自己在测,这样服务器的负担很小,这样导致每次访问可能是共用同样一个线程,导致会有这样的误解:每个session有一个ThreadLocal

三、ThreadLocal是相对于每个线程的,用户每次访问会有新的ThreadLocal

理论上来说,ThreadLocal是的确是相对于每个线程,每个线程会有自己的ThreadLocal。但是上面已经讲到,一般的应用服务器都会维护一套线程池。因此,不同用户访问,可能会接受到同样的线程。因此,在做基于TheadLocal时,需要谨慎,避免出现ThreadLocal变量的缓存,导致其他线程访问到本线程变量

四、对每个用户访问,ThreadLocal可以多用

可以说,ThreadLocal是一把双刃剑,用得来的话可以起到非常好的效果。但是,ThreadLocal如果用得不好,就会跟全局变量一样。代码不能重用,不能独立测试。因为,一些本来可以重用的类,现在依赖于ThreadLocal变量。如果在其他没有ThreadLocal场合,这些类就变得不可用了。个人觉得ThreadLocal用得很好的几个应用场合,值得参考

存放当前session用户:quake want的jert

存放一些context变量,比如WEBwork的ActionContext

存放session,比如spring hibernate ORM的session

上述就是小编为大家分享的ThreadLocal的几种误区分别是什么了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注编程网精选频道。

--结束END--

本文标题: ThreadLocal的几种误区分别是什么

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

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

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

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

下载Word文档
猜你喜欢
  • ThreadLocal的几种误区分别是什么
    这期内容当中小编将会给大家带来有关ThreadLocal的几种误区分别是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。JDK 1.2的版本中就提供java.lang.ThreadLocal,Threa...
    99+
    2023-06-17
  • JVM调优的几种策略分别是什么
    这期内容当中小编将会给大家带来有关JVM调优的几种策略分别是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。JVM参数调优是一个很头痛的问题,可能和应用有关系,别人说可以的对自己不一定管用。下面是本人一...
    99+
    2023-06-17
  • map遍历的几种方式分别是什么
    在Python中,有多种方式可以遍历一个字典(map)。以下是其中几种常见的方式:1. 使用for循环遍历键(key):```pyt...
    99+
    2023-08-25
    map
  • Python函数中的几种参数分别是什么
    这期内容当中小编将会给大家带来有关Python函数中的几种参数分别是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1.必需的参数:必须参数须以正确的顺序传入函数,调用的数量必须和声明时的一样def&n...
    99+
    2023-06-21
  • 删除MS JVM的几种途径分别是什么
    今天就跟大家聊聊有关删除MS JVM的几种途径分别是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。这里向大家描述一下如何删除MS JVM,这里有几种常用的方法和大家分享一下,相信...
    99+
    2023-06-17
  • 八种SQL错误用法分别是什么
    八种SQL错误用法分别是什么,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。1、LIMIT 语句分页查询是最常用的场景之一,但也通常也是最容易出...
    99+
    2024-04-02
  • JfreeChart生成图片的几种方式分别是什么
    JfreeChart生成图片的几种方式分别是什么,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。下面主要介绍JfreeChart生成图片的几种方式。先从网上找点介绍。一、简介...
    99+
    2023-06-17
  • 设置Session失效的几种方法分别是什么
    本篇文章给大家分享的是有关设置Session失效的几种方法分别是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Session对象是HttpSessionState的一个实例...
    99+
    2023-06-17
  • 几种常用的C#排序方法分别是什么
    几种常用的C#排序方法分别是什么,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。这五种C#排序方法,其实在其他语言平台中也是常见的,因此C#排序方法也可以说是其他语言的排序方法,...
    99+
    2023-06-17
  • hive中的几种join到底有什么区别
    目录数据:1. left join2. join3. full join4. Join…on 1=15. union6. union allunio...
    99+
    2024-04-02
  • 网站开发中交换链接的几个认识误区分别是什么
    本篇文章为大家展示了网站开发中交换链接的几个认识误区分别是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。  第一个就是关于PR值。最近谷歌的一次意外更新让这个几乎被遗忘的名词又起波澜。PR值很重...
    99+
    2023-06-12
  • SAP freelancer接SAP项目的几种方法分别是什么
    本篇文章为大家展示了SAP freelancer接SAP项目的几种方法分别是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。SAP freelancer接SAP项目的几种方法根据这几年笔者找项目的...
    99+
    2023-06-05
  • 使用axios请求接口中几种content-type的区别是什么
    这篇文章主要介绍使用axios请求接口中几种content-type的区别是什么,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!axios的使用安装(一般使用框架的话, 脚手架都集成了...
    99+
    2024-04-02
  • Python字典中dict几种遍历方式分别是什么
    这期内容当中小编将会给大家带来有关Python字典中dict几种遍历方式分别是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1.使用 for key in dict遍历字典可以使用for key in...
    99+
    2023-06-25
  • php有几种数组初始化方法 分别是什么
    PHP是一种广泛应用于Web开发的脚本语言,它的数组有多种初始化方式。本文将介绍PHP数组的不同初始化方法并进行详细说明。一、定义一个空数组空数组是最简单的初始化方式,它可以使用以下方式进行:$array = array();或$array...
    99+
    2023-05-22
  • vue路由有哪几种模式有什么区别
    本教程操作环境:windows7系统、vue3版,DELL G3电脑。vue路由实际上存在三种模式:Hash: 使用URL的hash值来作为路由。支持所有浏览器。History: 以来HTML5 History API 和服务...
    99+
    2023-05-14
    Vue
  • 5种exception分别是什么
    今天就跟大家聊聊有关5种exception分别是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。空指针(Java.lang.NullPointerException)他是啥(wha...
    99+
    2023-06-02
  • java之jvm两种存储区的类型分别是什么
    小编给大家分享一下java之jvm两种存储区的类型分别是什么,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Java的优点是什么1. 简单,只需理解基本的概念,就可...
    99+
    2023-06-14
  • mysql中分表与分区的区别是什么
    这篇文章将为大家详细讲解有关mysql中分表与分区的区别是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。一,什么是mysql分表,分区什么是分表,从表面...
    99+
    2024-04-02
  • win10逻辑分区和主分区的区别是什么
    这篇“win10逻辑分区和主分区的区别是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“win10逻辑分区和主分区的区别是...
    99+
    2023-07-01
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作