14.ThreadLocal
ThreadLocal
1.线程局部变量,是一种多线程并发访问变量的解决方案,与同步技术 synchronize 加锁的方式不同,threadlocal完全不提供锁,而使用
空间换时间的手段,为每个线程提供变量的独立副本,一保证现成的安全。
2.在并发不是很高的时候,加锁的性能会更好,但是作为一套完全无关的线程安全解决方案,减少锁的竞争。
package demo3;
import java.util.concurrent.TimeUnit;
/**
* Created by liudan on 2017/7/7.
*/
public class MyThread1 {
public static ThreadLocal<String> threadLocalString = new ThreadLocal<String>();
public void setThreadLocalString(String string) {
threadLocalString.set(string);
}
public void getThreadLocalString() {
System.err.println("◆:" + Thread.currentThread().getName() + ":" + threadLocalString.get());
}
public static void main(String[] args) {
final MyThread1 myThread1 = new MyThread1();
Thread t1 = new Thread(new Runnable() {
@Override
public void run() {
myThread1.setThreadLocalString("张帅");
myThread1.getThreadLocalString();
}
},"T0000-01");
Thread t2 = new Thread(new Runnable() {
@Override
public void run() {
try {
TimeUnit.SECONDS.sleep(0);
myThread1.setThreadLocalString("张帅1111");
myThread1.getThreadLocalString();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
},"T0000-02");
t1.start();
t2.start();
}
}
输出:
◆:T0000-01:张帅
◆:T0000-02:张帅1111
14.ThreadLocal的更多相关文章
- spring的bean创建过程
Spring的bean创建过程 步骤 执行过程 描述 1 ThreadLocal.set bean创建之前将beanName的一些属性放进ThreadLocal,避免多线程创建bean导致问题,并发创 ...
- JDK源码阅读顺序
很多java开发的小伙伴都会阅读jdk源码,然而确不知道应该从哪读起.以下为小编整理的通常所需阅读的源码范围. 标题为包名,后面序号为优先级1-4,优先级递减 1.java.lang 1) Obj ...
- 简单看看jdk7源码之java.lang包01
从今天开始简单开始读一遍jdk的源码,估计这个时间会很长,慢慢啃吧....(首先说一句抱歉,因为很多图都是直接百度扣的,图太多了不能为每一个图附上原版链接,不好意思!) 在网上看了很多的教程,读源码有 ...
- JDK1.8源码分析02之阅读源码顺序
序言:阅读JDK源码应该从何开始,有计划,有步骤的深入学习呢? 下面就分享一篇比较好的学习源码顺序的文章,给了我们再阅读源码时,一个指导性的标志,而不会迷失方向. 很多java开发的小伙伴都会阅读jd ...
- jdk源码阅读
转载https://www.cnblogs.com/mh-study/p/10078548.html 1.java.lang 1) Object 12) String 13) AbstractStri ...
- 基础篇:详解锁原理,volatile+cas、synchronized的底层实现
目录 1 锁的分类 2 synchronized底层原理 3 Object的wait和notify方法原理 4 jvm对synchronized的优化 5 CAS的底层原理 6 CAS同步操作的问题 ...
- 被字节跳动、小米、美团面试官问的AndroidFramework难倒了? 这里有23道面试真题,助力成为offer收割机!
目录 1.Android中多进程通信的方式有哪些?a.进程通信你用过哪些?原理是什么?(字节跳动.小米)2.描述下Binder机制原理?(东方头条)3.Binder线程池的工作过程是什么样?(东方头条 ...
- 【java基础 14】锁的粒度:ThreadLocal、volatile、Atomic和Synchronized
导读:题目中提到的几个关键字,分别是解决并发问题中,加锁所使用到的几个关键字,每个关键字代表的锁的粒度 不同,本篇博客,主要是从概念定义上,区分这几个关键字的应用场景.(PS:睡梦中,依稀记得有回面试 ...
- 14、Java并发性和多线程-Java ThreadLocal
以下内容转自http://ifeve.com/java-theadlocal/: Java中的ThreadLocal类可以让你创建的变量只被同一个线程进行读和写操作.因此,尽管有两个线程同时执行一段相 ...
随机推荐
- apache kafka系列之jmx监控指标参数
https://blog.csdn.net/lizhitao/article/details/35986849
- rest api load test
1. SoapUI + LoadUI 2. https://github.com/jeffbski/bench-rest 3. JMeter
- Java 8 对 List<List<String>> 排序
Java 8 对 List<List> 排序 import java.util.ArrayList; import java.util.List; import java.util.str ...
- 删除 list 集合中的元素
删除 list 集合中的元素,当删除的元素有多个的时候,只能使用迭代器来删除. 当删除 list 集合中的元素只有一个的时候,有三种方法都可以实现. import java.util.ArrayLis ...
- viewpager切换耗时控制
原文地址https://my.oschina.net/javalover/blog/179003 public class FixedSpeedScroller extends Scroller { ...
- Learn to Create Everything In a Fragment Shader(译)
学习在片元着色器中创建一切 介绍 这篇博客翻译自Shadertoy: learn to create everything in a fragment shader 大纲 本课程将介绍使用Shader ...
- 【BZOJ 3809】 3809: Gty的二逼妹子序列 (莫队+分块)
3809: Gty的二逼妹子序列 Time Limit: 80 Sec Memory Limit: 28 MBSubmit: 1728 Solved: 513 Description Autumn ...
- CodeForces 606C Sorting Railway Cars(最长连续上升子序列)
Description An infinitely long railway has a train consisting of n cars, numbered from 1 to n (the n ...
- [BZOJ4876][ZJOI2017]线段树
没有用到任何算法,代码只有60+行,但是细节多如牛毛,各种分类讨论必须全部想清楚才行. https://www.cnblogs.com/xiejiadong/p/6811289.html #inclu ...
- Java类实例化原理
Java对象的创建过程包括 类初始化(JVM类加载机制)和类实例化两个阶段. 一.Java对象创建时机 (1)使用new关键字创建对象 (2)反射创建对象 使用Class类的newInstance方法 ...