目前阶段,我只能知其然,不能做到知其所以然,这里引用一篇其所以然的文章,为以后理解ThreadLocal做准备: https://www.cnblogs.com/ldq2016/p/9041856.html

我把它大概理解为:一个线程模型,这个模型下的线程都共享这个模型下的一个泛型引用变量,但各线程各自的变量值是不同的,因为各线程各自的变量只是模型下的那个变量的副本。

ThreadLocal搭建要点:

  1. ThreadLocal要作为一个public static 的公共属性被声明和初始化在类中,(声明和初始化有三种方法)
  2. 该类中需要写一个内部类线程类(实现Runnable或继承Thread)

Demo:

package _20191209;

public class ThreadLocalTest {
//创建本地线程区域
//private static ThreadLocal<Integer> threadLocal = new ThreadLocal<>();
//创建并初始化线程局部变量
// private static ThreadLocal<Integer> threadLocal = new ThreadLocal<Integer>() {
// protected Integer initialValue() {
// return 200;//值的类型是泛型指定的类型
// }
// };
//以上两步甚至还可以简化为lamda形式
private static ThreadLocal<Integer> threadLocal = ThreadLocal.withInitial(()->200);
public static void main(String[] args) {
System.out.println(Thread.currentThread().getName()+"-->预设值:"+threadLocal.get());
//虽然两个线程都是使用同一个threadLocal,但它们内部各自的值是不相同的(运行输出查看)
new Thread(new MyThread()).start();
new Thread(new MyThread()).start();
} //写一个内部类
public static class MyThread implements Runnable{
@Override
public void run() {
//虽然多个线程都是使用同一个threadLocal,但它们内部各自的值是不相同的(运行输出查看)
threadLocal.set((int)(Math.random()*99));
System.out.println(Thread.currentThread().getName()+"-->"+threadLocal.get());
}
}
}

  

39 多线程(十一)——ThreadLocal的更多相关文章

  1. 架构师养成记--6.单例和多线程、ThreadLocal

    一.ThreadLocal 使用wait/notify方式实现的线程安全,性能将受到很大影响.解决方案是用空间换时间,不用锁也能实现线程安全. 来看一个小例子,在线程内的set.get就是thread ...

  2. 【Python】[进程和线程]多进程,多线程,ThreadLocal,进程VS.线程,分布式进程

    1.多进程,multiprocessing模块,   进程间的通信:Queue[队列],Pipes[管子]2.多线程,    注意:线程公用变量,混乱   解决方法Lock:因为只有一个锁,所以当要执 ...

  3. Java多线程之 ThreadLocal

    一.什么是ThreadLocal? 顾名思义它是local variable(线程局部变量).它的功用非常简单,就是为每一个使用该变量的线程都提供一个变量值的副本,是每一个线程都可以独立地改变自己的副 ...

  4. Java多线程:ThreadLocal

    一.ThreadLocal基础知识 ThreadLocal是线程的一个本地化对象,或者说是局部变量.当工作于多线程中的对象使用ThreadLocal维护变量时,ThreadLocal为每个使用该变量的 ...

  5. 赢在面试之Java多线程(十一)

    121,什么是线程? 线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位.程序员可以通过它进行多处理器编程,你可以使用多线程对运算密集型任务提速.比如,如果一个线程完 ...

  6. 并发和多线程(六)--ThreadLocal

    ThreadLocal是什么? 当使用ThreadLocal修饰变量的时候,ThreadLocal会为每个使用该变量的线程提供独立的变量副本,每个线程可以独立改变自己的副本,而不 影响其他线程的变量副 ...

  7. Java多线程基础-ThreadLocal

    感谢原文作者:Yuicon 原文链接:https://segmentfault.com/a/1190000016705955 序 在多线程环境下,访问非线程安全的变量时必须进行线程同步,例如使用 sy ...

  8. java 多线程(threadlocal)

    package com.example; import java.util.Random; public class App { public static class MyRunnable1 imp ...

  9. java多线程学习-ThreadLocal

    为了凑字,把oracle文档里介绍ThreadLocal抄过来 public class ThreadLocal<T> extends Object This class provides ...

随机推荐

  1. learning scala akka tell pattern(二)

    package com.example import akka.actor._ object Tutorial_02_Tell_Pattern extends App { println(" ...

  2. 使用WinDbg调试入门(内核模式)

    windbg是一个内核模式和用户模式调试器,包含在Windows调试工具中.这里我们提供了一些实践练习,可以帮助您开始使用windbg作为内核模式调试器. 设置内核模式调试 内核模式调试环境通常有两台 ...

  3. WinDbg 图形界面功能(三)

    1.4.调试菜单 调试相关操作的功能菜单在这个下面,比如单步执行等. Go 单击Go调试菜单恢复 (或开始) 在目标上的执行. 此执行将继续,直到抵达某个断点. 异常或事件发生时,该过程结束或调试器将 ...

  4. Xshell6和Xftp6初步使用

    Xshell6和Xftp6初步使用 一.Xshell6和Xftp6介绍: Xshell6:可以在Windows界面下用来访问远端不同系统下的服务器,从而比较好的达到远程控制终端的目的. Xftp6:是 ...

  5. [内网渗透]Windows中的用户帐户与组账户

    0x01 用户帐户 1.1 简介        用户帐户是对计算机用户身份的标识,本地用户帐户.密码存在本地计算机上,只对本机有效,存储在本地安全帐户数据库 SAM 中.        文件路径:C: ...

  6. Monkey框架(测试方法篇) - monkey日志分析

    Monkey日志分析是Monkey测试中非常重要的一个环节,通过日志分析,可以获取当前测试对象在测试过程中是否会发生异常,以及发生的概率,同时还可以获取对应的错误信息,帮助开发定位和解决问题.介绍日志 ...

  7. nacos-server安装、运行 (docker)

    https://nacos.io/en-us/docs/quick-start-docker.htmlhttps://github.com/nacos-group/nacos-docker mkdir ...

  8. docker删除镜像的时候报错--image has dependent child images

    背景 偶然间发现服务器上有很多镜像占用不少空间,想清理一下.结果直接进行删除报错: docker rmi 8f5116cbc201 Error response from daemon: confli ...

  9. 分布式事务之最终一致性BASE理论

    一.事务 事务提供一种机制将一个活动涉及的所有操作纳入到一个不可分割的执行单元,组成事务的所有操作只有在所有操作均能正常执行的情况下方能提交,只要其中任一操作执行失败,都将导致整个事务的回滚.简单地说 ...

  10. /etc/bashrc

    [ "$PS1" = "\\s-\\v\\\$ " ] && PS1="[\[\e[34;1m\]\u@\[\e[0m\]\[\e[3 ...