【概述】

线程局部变量,是一种多线程间并发访问变量的解决方案。与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. vue嵌套路由-query传递参数(三)

    在嵌套路由中我们经常会遇到父路由向子路由里面传递参数,传递参数有两种方法,通过 query 或者 params index.html <div id="app"> &l ...

  2. springboot设置日志级别时报错

    配置springboot日志,输出级别为info,运行时报错: Caused by: org.springframework.boot.context.properties.bind.BindExce ...

  3. 关于tp5全局过滤

    在config里面. // 默认全局过滤方法 用逗号分隔多个'default_filter' => 'htmlspecialchars',

  4. my.等级限制

    1.20190405 “春之恋曲 4月5日双平台新服开服公告”,20190426  上去新建了一个号  发现等级限制是 66级(2天后开启新等级) 20190412 “胭脂雪 4月12日双平台新服开服 ...

  5. Vue触发input选取文件点击事件

    CSS .upload-btn-box { margin-bottom: 10px; button { margin-right: 10px; } input[type=file] { display ...

  6. KOA 与 CO 实现浅析

    KOA 与 CO 的实现都非常的短小精悍,只需要花费很短的时间就可以将源代码通读一遍.以下是一些浅要的分析. 如何用 node 实现一个 web 服务器 既然 KOA 实现了 web 服务器,那我们就 ...

  7. 【Docker】制作一个支持SSH终端登录的镜像

    首先从官方或者docker.cn的镜像库中pull下来ubuntu镜像: docker pull ubuntu 现在用命令查看一下pull下来的ubuntu镜像: docker images 关于如何 ...

  8. HTML5定位使用心得

    最近项目中接到一个需求,需要使用百度地图API和HTML5定位特性. 对于百度地图API,没啥好说的,刨它的API就是了. 今天想说说JS定位特性. 浏览器支持 Internet Explorer 9 ...

  9. shiro的授权

    1.授权的流程 2.三种授权方式 1.编程式:通过写if/else 授权代码块完成: Subject subject = SecurityUtils.getSubject(); if(subject. ...

  10. Hibernate查询所有数据的操作

    Hibernate查询所有数据的操作方式有三种. 1.Query (1)使用该方法查询时,不需要编写sql语句,但是需要编写hql(Hibernate Query Language)语句,该语句是Hi ...