ThreadLocal并不是一个Thread,而是Thread的局部变量,也许把它命名 为ThreadLocalVariable更容易理解一些。当使用ThreadLocal维护变量时,ThreadLocal为每个使用该变量的线程提供 独立的变量副本,所以每一个线程都可以独立地改变自己的副本,而不会影响其他线程所对应的副本。从线程的角度看,目标变量就像是线程的本地变量,这也是类 名中”Local“所要表达的意思。
public class SequenceNumber{ private static ThreadLocal<Integer> seqNum = new ThreadLocal<Integer>(){ public Integer initialValue(){ return 0; } }; public int getNextNum(){ seqNum.set(seqNum.get()+1); return seqNum.get(); } public static void main(String[] args){ SequenceNumber sn = new SequenceNumber(); 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 SequenceNumber sn; public TestClient(SequenceNumber sn){ this.sn = sn; } public void run(){ for(int i = 0 ; i < 3 ; i++){ System.out.println("Thread["+Thread.currentThread().getName()+ "] sn ["+sn.getNextNum() + "]"); } } } }三个TestClient共享一个sn。运行以上代码,在控制台得到以下结果:
Thread[Thread-2] sn [1] Thread[Thread-2] sn [2] Thread[Thread-2] sn [3] Thread[Thread-0] sn [1] Thread[Thread-0] sn [2] Thread[Thread-0] sn [3] Thread[Thread-1] sn [1] Thread[Thread-1] sn [2] Thread[Thread-1] sn [3]
可以看到sn是线程安全的
相关推荐
java ThreadLocal多线程专属的变量源码java ThreadLocal多线程专属的变量源码java ThreadLocal多线程专属的变量源码java ThreadLocal多线程专属的变量源码java ThreadLocal多线程专属的变量源码java ThreadLocal多...
本例以序列号生成的程序为例,展示ThreadLocal的使用
目录一、背景介绍二、TestNG多线程详解2.1 TestNG多线程实现2.2 TestNG多线程效果演示三、ThreadLocal3.1 ThreadLocal概念3.2 具体实现 一、背景介绍 在使用Selenium+TestNG做WebUI自动化过程中,为了能够加快Web...
java多线程安全性基础介绍 线程安全 正确性 什么是线程安全性 原子性 竞态条件 i++ 读i ++ 值写回i 可见性 JMM 由于cpu和内存加载速度的差距,在两者之间增加了多级缓存导致,内存并不能直接对cpu可见。 ...
目录SimpleDateFormat诡异bug复现SimpleDateFormat诡异bug字符串日期转Date日期(parse)Date日期转String类型(format)SimpleDateFormat出现bug...ThreadLocal注意事项使用ThreadLocal解决SimpleDateFormat线程安全问题总结...
你还在用synchronized?线程安全相关知识深入剖析
主要介绍ThreadLocal的原理,实例分析以及注意事项
ThreadLocal入门教程。 讲解了线程安全和ThreadLocal的使用的基本知识。
通过ThreadLocal对象定位到线程:Thread.currentThread()通过ThreadLocal对象拿到所在的ThreadLocalMap: T
通常复杂的处理流程中,我们会使用一些异步处理的手段,那么这种场景下ThreadLocal即可能出现获取失败的问题。 public class ThreadLocalTest { public static void main(String[] args) { ThreadLocal ...
线程本地 可移植,实现可配置,并且与c++11 thread_local兼容。 使用宏THREADL_LOCA(T)的相同代码支持由宏USE_STD_THREAD_LOCAL控制的不同实现。 宏THREAD_LOCAL(...)的默认实现是c ++ 11 thread_local关键字(如果...
今天小编就为大家分享一篇关于Hibernate用ThreadLocal模式(线程局部变量模式)管理Session,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
javaee开发常见的模式有MVC模式,在C层中常常会再次分层,如:servlet(web层)、service(业务逻辑层)、dao(数据访问层),其中service和dao最容易混在一起,如转...所以,使用ThreadLocal可以解决这样的分层问题。
主要介绍了Java中的线程同步与ThreadLocal无锁化线程封闭实现,Synchronized关键字与ThreadLocal变量的使用是Java中线程控制的基础,需要的朋友可以参考下
导致JVM内存泄露的ThreadLocal详解 为什么要有ThreadLocal ThreadLocal的使用 实现解析 引发的内存泄漏分析 错误使用ThreadLocal导致 线程不安全分析
关于线程变量ThreadLocal的介绍以及说明. 关于线程变量ThreadLocal的介绍以及说明. 关于线程变量ThreadLocal的介绍以及说明. 关于线程变量ThreadLocal的介绍以及说明. 关于线程变量ThreadLocal的介绍以及说明. ...
主要介绍了Java ThreadLocal 线程安全问题解决方案的相关资料,需要的朋友可以参考下
ThreadLocal
虽然所有的线程都能访问到这个ThreadLocal实例,但是每个线程却只能访问到自己通过调用ThreadLocal的set()方法设置的值。即使是两个不同的线程在同一个ThreadLocal对象上设置了不同的值,他们仍然无法访问到对方的值...