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的更多相关文章
随机推荐
- Linux下安装渗透测试框架Metasploit
我们先来说一种方法,直接从github来下载: git clone --depth=1 git://github.com/rapid7/metasploit-framework metasploit ...
- php中慎用==
var_dump(' 123fg456'==123);var_dump('some string' == 0);var_dump(123.0 == '123d456');var_dump(0 == & ...
- 匈牙利算法、KM算法
PS:其实不用理解透增广路,交替路,网上有对代码的形象解释,看懂也能做题,下面我尽量把原理说清楚 基本概念 (部分来源.部分来源) 二分图: 设G=(V,E)是一个无向图,如果顶点V可分割为两个互不相 ...
- 织梦dedecms5.7手机站页面首页正常其他页面显示pc页面解决方法
最近遇到的问题,用的是织梦的dedecms从以前的版本升级上来的最新版5.7sp2,客户需要手机版的,要做一个百度的验证. 这个站首页显示算是基本正常,点开里面随便一个页面会跳转到pc页面上 ...
- iview tree 之如何获取已勾选的节点
1.记得添加 ref 2.用 this.$refs.tree.getCheckNodes()
- poi 导出工具类
工具类 package com.banxue.kmsservice.helper; import net.sf.json.JSONArray; import net.sf.json.JSONObjec ...
- RabbitMQ 很成熟 不是阿里的
简介 官网 http://www.rabbitmq.com RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现 RabbitMQ实现了AMQ ...
- jacvascript 保留小数点
//四舍五入保留2位小数(若第二位小数为0,则保留一位小数) function keepTwoDecimal(num) { var result = parseFloat(num); if (is ...
- Oracle 中运用rollup和cube实现汇总运算
前言.看了很多的随笔博文内容都是关于rollup和cube的用法,发现一个问题,很多都是一样或者转载的,但这都不是重点,重点是,他们写的都太专业化了,直接给一个结论,并没有给出整个推理出这个结论的过程 ...
- oracle dump的使用心得
使用DS开发的时候,有的时候会遇到一个问题:数据库层面定义的空格与DS自已定义的空格概念不一致,导致生成的数据会有一定的问题. 举例来说: 在数据库里面定义CHAR(20),如果插入的字符不足20的时 ...