19_ThreadLocal
【概述】
线程局部变量,是一种多线程间并发访问变量的解决方案。与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的更多相关文章
随机推荐
- centos的基本命令04
零:简述linux的文档目录结构 linux的文档目录是一个树形结构,操作的时候表现为以 / 开头的树形结构,/也是系统 的最顶端,也就是linux的root,也是linux系统的文件系统的入口. 他 ...
- Navicat 导出sql文件和导入sql文件
1.导出sql文件 (1)选择需要导出数据库表,右击--->转储为sql文件---->结构和数据 (2)会弹出如下界面,采用默认的数据表名,点击确认即可. 2.导入sql文件 (1)点击表 ...
- [转] Gitlab 8.x runner安装与配置
[From]http://muchstudy.com/2018/07/13/Gitlab-8-x-runner%E5%AE%89%E8%A3%85%E4%B8%8E%E9%85%8D%E7%BD%AE ...
- system命令
服务查看 查看所有服务运行状态: service --status-all chkconfig --list 查看单个服务的运行状态 service sshd status 查看启动状态,是否开机自动 ...
- django Form数据读取问题
1.在我学习django的过程中,我学习到了一个关于表单验证的问题 2.我们从前端post一个表单,通过urls配置,传给对应的view方法 3.然后再传给Form验证 4.一开始我是很好奇,在vie ...
- Shell检查程序是否正常,并显示出程序启动时间、执行时间
项目中多个实例,而每个实例均启动一个程序,本脚本将多个程序统一进行监控,并支持文件配置 #!/bin/sh bin=$(cd ``;pwd) cd ${bin} ### 定义检查函数 chkProgr ...
- 2017 FVDI2 ABRITES Commander with 18 Softwares FULL Version + FLY OBD Terminator + J2534 DrewTech Softwares
Highlights of FVDI2 Abrites Commander Full Version: 1.Free update online. 2.This is full version FVD ...
- lua-nginx-module模块常用命令
ngx.location.capture 用法: local res = ngx.location.capture(uri, options) 发起一个同步非阻塞的nginx子请求,uri是inter ...
- flow类型检查
https://blog.csdn.net/tangxiujiang/article/details/80778627 Flow的简单介绍 2018年06月22日 21:54:25 tangxiuji ...
- Robot Framework自动化测试三(selenium API)
Robot Framework Selenium API 说明: 此文档只是将最常用的UI 操作列出.更多方法请查找selenium2Library 关键字库. 一.浏览器驱动 通过不同的浏览器 ...