39 多线程(十一)——ThreadLocal
目前阶段,我只能知其然,不能做到知其所以然,这里引用一篇其所以然的文章,为以后理解ThreadLocal做准备: https://www.cnblogs.com/ldq2016/p/9041856.html
我把它大概理解为:一个线程模型,这个模型下的线程都共享这个模型下的一个泛型引用变量,但各线程各自的变量值是不同的,因为各线程各自的变量只是模型下的那个变量的副本。
ThreadLocal搭建要点:
- ThreadLocal要作为一个public static 的公共属性被声明和初始化在类中,(声明和初始化有三种方法)
- 该类中需要写一个内部类线程类(实现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的更多相关文章
- 架构师养成记--6.单例和多线程、ThreadLocal
一.ThreadLocal 使用wait/notify方式实现的线程安全,性能将受到很大影响.解决方案是用空间换时间,不用锁也能实现线程安全. 来看一个小例子,在线程内的set.get就是thread ...
- 【Python】[进程和线程]多进程,多线程,ThreadLocal,进程VS.线程,分布式进程
1.多进程,multiprocessing模块, 进程间的通信:Queue[队列],Pipes[管子]2.多线程, 注意:线程公用变量,混乱 解决方法Lock:因为只有一个锁,所以当要执 ...
- Java多线程之 ThreadLocal
一.什么是ThreadLocal? 顾名思义它是local variable(线程局部变量).它的功用非常简单,就是为每一个使用该变量的线程都提供一个变量值的副本,是每一个线程都可以独立地改变自己的副 ...
- Java多线程:ThreadLocal
一.ThreadLocal基础知识 ThreadLocal是线程的一个本地化对象,或者说是局部变量.当工作于多线程中的对象使用ThreadLocal维护变量时,ThreadLocal为每个使用该变量的 ...
- 赢在面试之Java多线程(十一)
121,什么是线程? 线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位.程序员可以通过它进行多处理器编程,你可以使用多线程对运算密集型任务提速.比如,如果一个线程完 ...
- 并发和多线程(六)--ThreadLocal
ThreadLocal是什么? 当使用ThreadLocal修饰变量的时候,ThreadLocal会为每个使用该变量的线程提供独立的变量副本,每个线程可以独立改变自己的副本,而不 影响其他线程的变量副 ...
- Java多线程基础-ThreadLocal
感谢原文作者:Yuicon 原文链接:https://segmentfault.com/a/1190000016705955 序 在多线程环境下,访问非线程安全的变量时必须进行线程同步,例如使用 sy ...
- java 多线程(threadlocal)
package com.example; import java.util.Random; public class App { public static class MyRunnable1 imp ...
- java多线程学习-ThreadLocal
为了凑字,把oracle文档里介绍ThreadLocal抄过来 public class ThreadLocal<T> extends Object This class provides ...
随机推荐
- 「APIO2018」选圆圈
传送门 Description 有\(n\)个圆,每次找到这些圆中半径最大中的编号最小的圆,删除ta及与其有交集的所有圆. 对于每个圆,求出它是被哪一个圆删除的. Solution K-D Tree ...
- 配置Always On AG
1.准备测试环境的服务器 在 Always On AG 中如果需要自动 Failover 至少需要集群中有 3 台服务器,但是我只是测试功能,因此只使用了两台服务器.并且本文不涉及任何 Pacemak ...
- Mybatis 面试题
题目: 什么是Mybatis? Mybatis27题 Mybaits的优点 Mybatis27题 MyBatis框架的缺点 Mybatis27题 MyBatis框架适用场合Mybatis27题 My ...
- 一次解决idea maven settings.xml文件不生效
一直使用eclipse,在eclipse中可以手动指定global和user settings,并且settings的文件名称可以不是settings.xml,只要内容符合maven规范就行.如下: ...
- [转]Windows内存堆内容整理总结
在系统安全研究中,堆,是一个极其重要的内存区域以及研究的热点.堆,区别于栈区.全局数据区以及代码区,它的主要作用是允许程序在运行时动态地申请某个大小的内存空间.本文将从宏观到微观,简单梳理总结一下Wi ...
- unity2019新建LWRP项目出错:Failed to resolve project template
原因不详,但是在C盘创建项目的确会出现这个问题,改到D盘或E盘就没这个问题了
- 关于高负载服务器Kernel的ipv4的TCP参数说明及优化
net.ipv4.tcp_mem 内核分配给TCP连接的内存,单位是Page,1 Page = 4096 Bytes,可用命令查看: #getconf PAGESIZE 4096 net.ipv4.t ...
- C# HtmlDecode、HtmlEncode、UrlEncode、UrlDecode
不用System.Web 对 Content进行编码,De编码 string content = "<br/>"; string s1 = WebUtility.Htm ...
- nginx支持websocket及websocket部分原理介绍
nginx支持websocket及websocket部分原理介绍最近ipc通过websocket与server进行通行,经过无法通过nginx进行反向代理,只有直连nodejs端口.而且部署到阿里云用 ...
- PLSQL Developer连接远程oracle配置(详细解读)
转自:https://blog.csdn.net/zhige_j/article/details/80832654 一.安装Instant Client 1. 下载Instant Client(轻量级 ...