- 浏览: 499029 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (502)
- Java (70)
- Linux (10)
- 数据库 (38)
- 网络 (10)
- WEB (13)
- JSP (4)
- 互联网 (71)
- JavaScript (30)
- Spring MVC (19)
- HTML (13)
- CSS (3)
- AngularJS (18)
- Redis (5)
- Bootstrap CSS (1)
- ZooKeeper (4)
- kafka (6)
- 服务器缓存 (4)
- Storm (1)
- MongoDB (9)
- Spring boot (16)
- log4j (2)
- maven (3)
- nginx (5)
- Tomcat (2)
- Eclipse (4)
- Swagger (2)
- Netty (5)
- Dubbo (1)
- Docker (7)
- Hadoop (12)
- OAuth (1)
- webSocket (4)
- 服务器性能 (7)
- Session共享 (1)
- tieye修改 (1)
- 工作 (1)
- 有用的语录 (0)
- https (2)
- common (5)
- 产品开发管理 (1)
- CDN 工作原理 (1)
- APNS、GCM (1)
- 架构图 (3)
- 功能实现分析 (1)
- JMX (1)
- 服务器相关操作命令 (1)
- img02 (0)
- 服务器环境搭建 (9)
- goodMenuBook (1)
- CEInstantPot (0)
- 有用数据 (1)
- 百度地图WEB API (2)
- 正则表达式 (1)
- 样式例子 (2)
- staticRecipePressureCooker.zip (1)
- jCanvas (1)
- 网站攻击方法原理 (1)
- 架构设计 (3)
- 物联网相关 (3)
- 研发管理 (7)
- 技术需求点 (1)
- 计划 (1)
- spring cloud (11)
- 服务器开发的一些实用工具和方法 (1)
- 每天学到的技术点 (4)
- Guava (1)
- ERP 技术注意要点 (2)
- 微信小程序 (1)
- FineRepor (1)
- 收藏夹 (1)
- temp (5)
- 服务架构 (4)
- 任职资格方案 (0)
- osno_test (1)
- jquery相关 (3)
- mybatis (4)
- ueditor (1)
- VueJS (7)
- python (10)
- Spring EL (1)
- shiro (1)
- 前端开发原理与使用 (7)
- YARN (1)
- Spark (1)
- Hbase (2)
- Pig (2)
- 机器学习 (30)
- matplotlib (1)
- OpenCV (17)
- Hystrix (1)
- 公司 (1)
- miniui (4)
- 前端功能实现 (3)
- 前端插件 (1)
- 钉钉开发 (2)
- Jenkins (1)
- elasticSearch使用 (2)
- 技术规范 (4)
- 技术实现原理 (0)
最新评论
java ThreadLocal例子
ThreadLocal就是用于每个线程拥有自己的一份变量,线程之间是不同的对象
参考:http://www.cnblogs.com/dreamroute/p/5034726.html
参考:http://blog.csdn.net/lufeng20/article/details/24314381
https://www.cnblogs.com/dolphin0520/p/3920407.html(Java并发编程:深入剖析ThreadLocal)
https://blog.csdn.net/chen_kkw/article/details/79176371(深入解析 ThreadLocal 和 ThreadLocalMap)
ThreadLocal就是用于每个线程拥有自己的一份变量,线程之间是不同的对象
import java.io.BufferedReader; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStreamReader; public class ThreadLocalTest { // private static ThreadLocalTestModel threadLocalTestModel; // // static { // System.out.println("threadLocalTestModel"); // threadLocalTestModel = new ThreadLocalTestModel(); // threadLocalTestModel.setTest("AAA"); // } // ①通过匿名内部类覆盖ThreadLocal的initialValue()方法,指定初始值 private static ThreadLocal<ThreadLocalTestModel> seqNum = new ThreadLocal<ThreadLocalTestModel>() { public ThreadLocalTestModel initialValue() { ThreadLocalTestModel threadLocalTestModel = new ThreadLocalTestModel(); threadLocalTestModel.setTest("AAA"); return threadLocalTestModel; } }; // ②获取下一个序列值 public ThreadLocalTestModel getNextNum() { ThreadLocalTestModel threadLocalTestModel = seqNum.get(); // ThreadLocalTestModel threadLocalTestModel2 = new ThreadLocalTestModel(); // threadLocalTestModel2.setTest("BBB"); seqNum.set(threadLocalTestModel); return threadLocalTestModel; } public static void main(String[] args) { ThreadLocalTest sn = new ThreadLocalTest(); // ③ 3个线程共享sn,各自产生序列号 TestClient t1 = new TestClient(sn); TestClient t2 = new TestClient(sn); TestClient t3 = new TestClient(sn); t1.start(); t2.start(); t3.start(); } private static class TestClient extends Thread { private ThreadLocalTest sn; public TestClient(ThreadLocalTest sn) { this.sn = sn; } public void run() { for (int i = 0; i < 3; i++) { ThreadLocalTestModel threadLocalTestModel = sn.getNextNum(); if(threadLocalTestModel!=null){ // ④每个线程打出3个序列值 System.out.println("thread[" + Thread.currentThread().getName() + "] --> sn[" + threadLocalTestModel.toString() + "] ,hashCode == " + threadLocalTestModel.hashCode()); threadLocalTestModel.setTest("ccC"); } } } } }
private static ThreadLocal<HttpServletRequest> reqLocal = new ThreadLocal<HttpServletRequest>(); private static ThreadLocal<HttpServletResponse> responseLocal = new ThreadLocal<HttpServletResponse>(); public static void setHttpServletRequest(HttpServletRequest request) { reqLocal.set(request); } public static void clearHttpReqResponse() { reqLocal.remove(); responseLocal.remove(); } public static HttpServletRequest getHttpServletRequest() { return reqLocal.get(); } }
参考:http://www.cnblogs.com/dreamroute/p/5034726.html
参考:http://blog.csdn.net/lufeng20/article/details/24314381
https://www.cnblogs.com/dolphin0520/p/3920407.html(Java并发编程:深入剖析ThreadLocal)
https://blog.csdn.net/chen_kkw/article/details/79176371(深入解析 ThreadLocal 和 ThreadLocalMap)
发表评论
-
elasticSearch使用
2022-04-27 08:42 421ElasticSearch 基于Apache Lucene构建 ... -
IDEA 快捷键
2022-03-02 16:55 250大小写转换快捷键 ctr+shift+u IDEA ... -
每天学到的技术点3
2022-02-21 20:01 2501.TEXT与BLOB的区别,二者 ... -
zookeeper dubbo 安装
2021-12-04 19:27 325docker-machine ssh default d ... -
JVM 调优与测试
2021-05-22 22:24 585VisualVM 能够监控线程,内存情况,查看方法的CPU ... -
百度人脸识别
2021-05-21 16:11 366package com.gaojinsoft.htwy.y20 ... -
springboot tomcat 参数配置与数据库连接池多少的性能分析
2021-05-12 22:15 565参数配置与数据库连接池多少的性能分析 tomcat线程数 ... -
log4j2应用
2020-07-23 14:16 367https://blog.csdn.net/giventian ... -
文件上传下载
2020-07-06 13:16 4241.文件ID,名字(源,目标),大小,路径(/aa/bb/s. ... -
base64与file 相互转换
2019-10-23 18:19 785base64与file 相互转换 import org. ... -
百度身份证识别
2019-10-18 18:19 696package com.gaojinsoft.htwy.y20 ... -
JAVA 实用方法
2019-05-16 09:50 358//得到xml文件中的sql文本 public St ... -
导出内容到excel文件方法
2019-05-15 10:52 513@SuppressWarnings("rawtype ... -
要求fsss
2019-09-21 21:30 311/* */ package com.midea.com ... -
反射、类信息、动态代理、CGLIB动态代理原理与测试
2019-01-29 21:04 488package com.midea.common.classT ... -
JVM 监控工具
2019-01-21 18:04 383JVM 监控工具 //========== ... -
java 线程池线程复用原理
2019-01-15 17:10 1164java 线程池线程复用原理 其实就一个大run()把其 ... -
LockSupport原理
2019-01-11 18:01 703LockSupport原理 在Java语言中,每一个对象有 ... -
runnable与thread 区别
2019-01-11 14:49 683runnable与thread 区别 在java中可有两种 ... -
Java的Future模式
2019-01-11 10:08 449Java的Future模式 runnable与thread ...
相关推荐
**线程局部变量(ThreadLocal)是Java编程中一个非常重要的工具类,它在多线程环境下提供了线程安全的数据存储。ThreadLocal并不是一个变量,而是一个类,它为每个线程都创建了一个独立的变量副本,使得每个线程都...
在这个例子中,getSession()方法会检查ThreadLocal中是否存在Session,若不存在则创建并设置,而closeSession()方法则负责关闭并移除当前线程的Session副本。 总结来说,ThreadLocal是Java中解决多线程数据隔离问题...
在这个例子中,`MyRunnable`类中的`threadLocal`变量被两个不同的线程(`thread1`和`thread2`)使用。尽管它们共享同一个Runnable实例,但每个线程都会有自己的ThreadLocal副本,因此它们的`threadLocal`变量持有...
`ThreadLocal`的全称是`java.lang.ThreadLocal`,它并不是一个线程,而是一个线程局部变量的容器。`ThreadLocal`的工作原理是为每个线程创建一个单独的实例副本,这些副本存储在一个与线程相关的映射表中。当线程...
在这个例子中,`seqNum`是一个ThreadLocal实例,它的`initialValue()`方法返回0,表示序列号的初始值。`getNextNum()`方法会获取当前线程的序列号副本,增加1后再保存回去,这样每个线程都会拥有自己独立的序列号...
早在 JDK 1.2 的时代,java.lang.ThreadLocal 就诞生了,它是为了解决多线程并发问题而设计的,只不过设计得有些难用,所以至今没有得到广泛使用。其实它还是挺有用的,不相信的话,我们一起来看看这个例子吧。 一个...
ThreadLocal是Java中一个非常重要的线程局部变量工具类,它的设计目的是为了解决多线程环境下各个线程之间的数据隔离问题。通过ThreadLocal,每个线程都可以拥有自己独立的变量副本,避免了多线程间的数据冲突和同步...
在这个例子中,`ThreadLocalTest`类中的`threadLocal`变量为每个线程初始化一个随机值,并且`increament()`方法会增加当前线程的`ThreadLocal`变量的值。由于每个线程都有自己的副本,因此不会发生数据竞争。 总结...
Java并发编程中的ThreadLocal类是一个非常重要的工具,它允许我们在多线程环境下为每个线程维护独立的变量副本,从而避免了线程间的数据共享和同步问题。ThreadLocal并不是一个线程,而是一个线程局部变量的容器。...
Java中的ThreadLocal类是一个强大的工具,它允许程序员创建线程局部变量。这意味着每个线程都有其自己独立的、不可见的变量副本,从而避免了线程间的数据共享问题,简化了多线程环境下的编程复杂性。ThreadLocal并不...
本资源“java线程例子大全”包含了十八个单元的实例代码,覆盖了Java线程操作的多个方面。 1. **线程创建** - 继承`Thread`类:创建一个新的类,该类继承自`Thread`,然后重写`run()`方法。实例化后调用`start()`...
ThreadLocal是Java提供的一种线程局部变量,它为每个线程创建并维护一个独立的变量副本,使得每个线程只能访问自己内部的变量,互不干扰。在多线程环境下,ThreadLocal能帮助我们避免共享状态的并发问题,提升程序的...
ThreadLocal 是 Java 语言中的一种多线程编程机制,用于解决多线程程序的并发问题。它不是一个 Thread,而是一个 Thread 的局部变量。ThreadLocal 的出现是为了解决多线程程序中的共享变量问题。当多个线程访问同一...
在这个例子中,`SequenceNumber`类有一个`ThreadLocal<Integer>`成员变量`seqNum`,并重写了`initialValue()`方法初始化为0。`getNextNum()`方法用于获取并递增序列号。`TestClient`线程类会打印出各自线程的序列号...
### Java常用词汇与数据库操作详解 在Java编程中,掌握一系列关键术语对于理解和编写高效、安全的代码至关重要。本文将深入解析几个常见的Java词汇及其在数据库操作中的应用实例,帮助开发者提升技能,优化代码。 ...
在这个例子中,`UniqueThreadIdGenerator` 类使用 `ThreadLocal` 来为每个线程生成唯一的 ID。`initialValue()` 方法会在每个线程首次访问 `uniqueNum` 时被调用,返回一个递增的 ID。 5. **注意事项** - 虽然 `...
在Java中,ThreadLocal被广泛应用于Web中间件、服务端编程和微服务架构中,用以解决多线程环境下的数据隔离问题。 首先,ThreadLocal原理是基于每个线程创建一个私有的数据存储结构(ThreadLocalMap),使得线程...
在我们的例子中,`ThreadLocal`的引用破坏了这些条件,所以必须手动断开引用。 总之,理解`ThreadLocal`的工作原理和`WebappClassLoader`的角色对于防止内存泄漏至关重要。在使用`ThreadLocal`时,一定要确保在恰当...
在Java中,有多种方式可以实现线程间的数据共享和对象独立,其中ThreadLocal是常用的工具之一。 在多线程环境下,共享数据通常会引发线程安全问题,比如上述例子中的“张三给李四转钱”场景,如果两个线程同时操作...
`ThreadLocal`是一个非常有用的类,它在Java 1.2版本中被引入到`java.lang`包中。其主要功能是在多线程环境中为每个线程提供独立的变量副本,从而避免了线程之间的数据竞争和同步问题。`ThreadLocal`并不是线程本身...