【概述】

线程局部变量,是一种多线程间并发访问变量的解决方案。与synchronized等加锁的方式不同,ThreadLocal完全不提供锁,而使用以空间换时间的手段,为每个线程提供变量的独立副本,以保障线程安全。

从性能上讲,ThreadLocal不具有绝对的优势,在并发不是很高的时候,加锁的性能会更好,但作为一套与锁完全无关的线程安全解决方案,在并发量很高或者竞争激烈的场景,使用ThreadLocal可以在一定程度上减少锁竞争。

【实例】

public class Test{
public static void main(String[] args) throws Exception{ ThreadLocalDemo.setLong(666L);
ThreadLocalDemo.setString("666sss");
ThreadLocalDemo.getAll(); //新线程t1
Thread t1 = new Thread(new Runnable() {
@Override
public void run() {
ThreadLocalDemo.setLong(100L);
ThreadLocalDemo.setString("100sss");
ThreadLocalDemo.getAll();
}
}); //启动新线程t1
t1.start(); Thread.sleep(1000);
ThreadLocalDemo.getAll();
}
} class ThreadLocalDemo{ public static ThreadLocal<String> localString = new ThreadLocal<>(); public static ThreadLocal<Long> localLong = new ThreadLocal<>(); public static void setLong(Long l){
localLong.set(l);
}
public static void setString(String s){
localString.set(s);
}
public static void getAll(){
System.out.println("localString.get()=" + localString.get() + ",localLong.get()=" + localLong.get());
} }

【运行结果】

19_ThreadLocal的更多相关文章

随机推荐

  1. springcloud(二)-最简单的实战

    技术储备 Spring cloud并不是面向零基础开发人员,它有一定的学习曲线. 语言基础:spring cloud是一个基于Java语言的工具套件,所以学习它需要一定的Java基础.当然,sprin ...

  2. iis上部署本地数据库LocalDB的方法

    1. iis应用程序池的标识设置为"ApplicationPoolIdentify"(比较安全) 2. 不要将数据库物理文件保存在网站的物理路径内,因为iis应用程序池的标识为Ap ...

  3. OPPO R7在哪里打开USB调试模式的详细流程

    在我们使用PC连接安卓手机的时候,如果手机没有开启USB调试模式,PC则没办法成功检测到我们的手机,这时我们需要想办法将手机的USB调试模式打开,如下资料我们介绍OPPO R7如何开启USB调试模式的 ...

  4. android 捕获未try的异常

    1.Thread.UncaughtExceptionHandler java里有很多异常如:空指针异常,越界异常,数值转换异常,除0异常,数据库异常等等.如果自己没有try / catch 那么线程就 ...

  5. 2.7 Go channel

    channel简单示例 package main import ( "fmt" "time" ) //channel的创建,发送,接收 func channe1 ...

  6. $bzoj1011-HNOI2008$ 遥远的行星 其他

    题面描述 直线上\(N\)颗行星,\(X=i\)处有行星\(i\),行星\(j\)受到行星\(i\)的作用力,当且仅当\(i<=A_j\).此时J受到作用力的大小为\(F_{i\to j}=\f ...

  7. 1.8 js基础(常用方法小结)

    1.获取随机数 var rdm=function(n,m){ return parseInt(n+Math.random()*(m-n)); } 2.位数不够补0 function toDou(inu ...

  8. Hadoop科普文—常见的45个问题解答

    1.Hadoop集群可以运行的3个模式? 单机(本地)模式 伪分布式模式 全分布式模式 2.  单机(本地)模式中的注意点? 在单机模式(standalone)中不会存在守护进程,所有东西都运行在一个 ...

  9. 很小的一个函数执行时间调试器Timer

    对于函数的执行性能(这里主要考虑执行时间,所耗内存暂不考虑),这里写了一个简单的类Timer,用于量化函数执行所耗时间. 整体思路很简单,就是new Date()的时间差值.我仅仅了做了一层简单的封装 ...

  10. Layer UI 模块化的用法(转)

    此文章适合入门的同学查看,之前因为项目的原因,在网上找了一套Layer UI做的后台管理系统模板,完全不懂LayUI里面的JS用法,看了官方文档和其它资料后才明白怎么去实现模块化这个例子,但是还是感觉 ...