java之ThreadLocal简单使用总结

1、介绍ThreadLocal

看安卓源码的时候,在这个类Looper.java ,会有这个一句函数

 

static final ThreadLocal<Looper> sThreadLocal = new ThreadLocal<Looper>();


一开始我不是很懂ThreadLocal.java这个类,简单理解

 

ThreadLocal 就是把变量分成很多个拷贝,每个线程拥有一个,比如说一个变量使用ThreadLocal修饰,则在线程中会创建这个变量的副本进行操作.操作不会受另外一个线程影响.

 

 

2、常用API

ThreadLocal.java

 

1、构造函数

 

public ThreadLocal() {}

 

 

2、initialValue函数

 

    protected T initialValue() {return null;}


3、get函数

 

public T get()

该函数用来获取与当前线程关联的ThreadLocal的值
如果当前线程没有该ThreadLocal的值,则调用initialValue函数获取初始值返回。

 

 

4、set函数

public void set(T value)

设置当前线程的ThreadLocal的值为value

 

 


5、remove函数

public void remove()

将当前线程的ThreadLocal绑定的值删除
在某些情况下需要手动调用该函数,防止内存泄露。

 

 

 

3、测试代码

 

package com.sangfor.threadlocal;public class TestThreadLocal {public static final ThreadLocal<Integer> sThreadLocal = new ThreadLocal<Integer>(){@Overrideprotected Integer initialValue() {return 0;}};public static void main(String[] args) {for (int i = 0; i < 10; i++) {new MyThread(i).start();}}static class MyThread extends Thread {public int index;public MyThread(int index) {this.index = index;} @Overridepublic void run() {System.out.println("线程" + index + "的初始value:" + sThreadLocal.get());for (int i = 0; i < 10; i++) {sThreadLocal.set(sThreadLocal.get() + i);}System.out.println("线程" + index + "的累加value:" + sThreadLocal.get());}}
}

 

 

 

 

 

4、运行结果

 

线程0的初始value:0
线程0的累加value:45
线程1的初始value:0
线程1的累加value:45
线程2的初始value:0
线程2的累加value:45
线程3的初始value:0
线程3的累加value:45
线程4的初始value:0
线程4的累加value:45
线程5的初始value:0
线程5的累加value:45
线程6的初始value:0
线程7的初始value:0
线程7的累加value:45
线程6的累加value:45
线程8的初始value:0
线程8的累加value:45
线程9的初始value:0
线程9的累加value:45

 

 

 

 

5、总结

用ThreadLocal修饰的变量,感觉就是每个线程都拥有一份原始数据的拷贝,每个线程只能修改自己的数据,其它线程不可以修改

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/290815.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

老师计算机传帮带工作总结,传帮带工作总结范文

传帮带工作总结范文一段时间的工作在不知不觉间已经告一段落了&#xff0c;回首这段不平凡的时间&#xff0c;有欢笑&#xff0c;有泪水&#xff0c;有成长&#xff0c;有不足&#xff0c;让我们好好总结下&#xff0c;并记录在工作总结里。那么如何把工作总结写出新花样呢&…

[Usaco2007 Demo][BZOJ1628] City skyline

1628: [Usaco2007 Demo]City skyline Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 320 Solved: 260[Submit][Status][Discuss]Description Input 第一行给出N&#xff0c;W第二行到第N1行:每行给出二个整数x,y&#xff0c;输入的x严格递增&#xff0c;并且第一个x总是1Out…

负载均衡(LB)集群 dr

LB、LVS介绍LB集群是load balance 集群的简写&#xff0c;翻译成中文就是负载均衡集群 LVS是一个实现负载均衡集群的开源软件项目 LVS架构从逻辑上可分为调度层(Director)、server集群层(Real server)和共享存储层LVS可分为三种工作模式: NAT(调度器将请求的目标ip即vip地址改为…

ASP.NET Core启动地址配置方法及优先级顺序 | .NET 6 版本

前言上次&#xff0c;我们讨论了如何通过配置或代码方式修改启动地址&#xff1a;《ASP.NET Core启动地址配置方法及优先级顺序》。不过是基于 .NET 5 版本的。由于 .NET 6 使用了最小 WEB API, 配置方式已经部分发生了变化。设置方法1. applicationUrl 属性launchSettings.jso…

php保存附件到指定服务器,如何在PHP中将电子邮件附件保存到服务器?

两天的大部分时间里,我一直在与PHP的电子邮件阅读功能作斗争.我正在编写一个脚本来读取邮箱中的电子邮件并将所有附件保存到服务器上.如果你曾经做过类似的事情,你可能会理解我的痛苦:PHP在电子邮件方面表现不佳!我已连接到POP3服务器,我可以迭代文件.这是代码的大致轮廓:if (!…

Java基础- super 和 this 解析

1. superkeyword表示超&#xff08;父&#xff09;类的意思。this变量代表对象本身。 2. super訪问父类被子类隐藏的变量或覆盖的方法。当前类假设是从超类继承而来的&#xff0c;当调用super.XX()就是调用基类版本号的XX&#xff08;&#xff09;方法。当中超类是近期的父类。…

Android之Handler和Loooper源码分析

1、handler在主线程和子线程互相通信&#xff08;子线程和子线程的通信&#xff09;简单使用 我们使用handler&#xff0c;可以实现主线程和子线程之间的相互通信&#xff0c;然后子线程和子线程之间的通信&#xff0c;如果不清楚&#xff0c;基本用法请先参考我的这篇博客 An…

VS2010 安装问题积累

vs2010 SP1安装不成功 日志文件里显示&#xff1a;error 1719 windows installer service could not be accessed 解决方法&#xff1a;Start, then Run, then type regedit Go to HKEY_LOCAL_MACHINE\SYSTEM\CURRENT CONTROL SET\SERVICES\MSIserver\WOW64 …

unix环境高级编程基础知识之第二篇(3)

看了unix环境高级编程第三章&#xff0c;把代码也都自己敲了一遍&#xff0c;另主要讲解了一些IO函数&#xff0c;read/write/fseek/fcntl&#xff1b;这里主要是c函数&#xff0c;比较容易&#xff0c;看多了就熟悉了。对fcntl函数讲解比较到位&#xff0c;它可以得到和改变打…

Avalonia跨平台入门第七篇之RadioButton的模板

前面其实已经玩耍过单选按钮,只不过一直好意思分享出来;今天终于可以正大光明的分享出来了,直接看效果吧:第一次使用然后的傻傻的版本(根据单选按钮的选中状态来切换二个图片);真的好Low:样式写法和WPF没太大区别:类似WPF中的触发器,使用了附加属性:前台具体使用方式:最终简单的…

svn之bash: syntax error near unexpected token `(‘ 解决办法

1、问题 svn update *****/网易(杭州)网络有限公司SSL-20170623001 出现这个错误 bash: syntax error near unexpected token ( 2、解决办法 改成下面的就行 把svn update *****/网易’(‘杭州’)‘网络有限公司SSL-20170623001

Angular 4.x 事件管理器及自定义EventManagerPlugin

在 Angular 中如何为同一个表达式绑定多个事件呢&#xff1f;如果我们这样做可能会是这样的&#xff1a; <div><button (click, mouseover)"onClick()">Click me</button> </div>复制代码在继续分析绑定多个事件之前&#xff0c;我们先来分析…

dell服务器报内存配置不正确,DELL 服务器系统提示错误解决的若干办法

《DELL 服务器系统提示错误解决的若干办法》由会员分享&#xff0c;可在线阅读&#xff0c;更多相关《DELL 服务器系统提示错误解决的若干办法(9页珍藏版)》请在人人文库网上搜索。1、DELL 服务器有时会若硬件的改动&#xff0c;在开机以后会提示错误信息。信息一般会提示在显示…

JSP PO VO BO DTO POJO DAO解释

PO &#xff1a;persistent object持久对象 1 &#xff0e;有时也被称为Data对象&#xff0c;对应数据库中的entity&#xff0c;可以简单认为一个PO对应数据库中的一条记录。2 &#xff0e;在hibernate持久化框架中与insert/delet操作密切相关。 3 &#xff0e;PO中不应该包含任…

java之RSA和Base64加密帮助类

1、RSAUtils.java类 package com.sangfor.vpn.client.service.utils; import java.io.BufferedReader; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.math.BigIn…

更强的压缩比!PostgreSQL开始支持Zstd

文 | 局长出品 | OSC开源社区&#xff08;ID&#xff1a;oschina2013&#xff09;PostgreSQL 现已通过其 TOAST 存储技术提供压缩支持&#xff0c;并且在过去的一年里构建了 LZ4 压缩支持——用于压缩 WAL、备份压缩以及其他用途&#xff0c;现在 PostgreSQL 开发者正准备通过 …

最近面试遇到的技术问题

京东性能组 1. oracle awr2. mysql 慢查询3. redis详细架构、如何插入数据4. jmeter使用及集群搭建5. nginx使用及tomcat集成 6. 数据库及sql优化的方案 7. 写存储过程 8. linux使用9. shell10. java e代驾 1. 接口测试方法2. sockets连接建立方法3. http三次握手过程 京东金融…

小程序和app用什么样的服务器,小程序和APP的本质区别是什么?哪个更值得开发?...

从微信小程序和用户见面到现在&#xff0c;这个功能已经越来越完善了&#xff0c;经过更彻底的挖掘&#xff0c;商业价值被挖掘出来了&#xff01;小程序和app有什么区别呢&#xff1f;为什么广州会更受欢迎呢&#xff1f;两者的区别首先&#xff0c;两者的区别在于&#xff0c…

jbpm6.5 环境搭建(三) 数据库 切换

2019独角兽企业重金招聘Python工程师标准>>> 经过一晚上的折腾&#xff0c;终于搞定&#xff0c;成功切换Mysql 步骤一&#xff1a; 安装mysql 数据库 创建数据库 名字为jbpm 设置用户名密码 我本地默认使用 root 步骤二&#xff1a; ** 修改配置文件 ** F:\jb…

Android之HandlerThread源码分析和简单使用(主线程和子线程通信、子线程和子线程通信)

1、先熟悉handler方式实现主线程和子线程互相通信方式&#xff0c;子线程和子线程的通信方式 如果不熟悉或者忘记了&#xff0c;请参考我的这篇博客 Android之用Handler实现主线程和子线程互相通信以及子线程和子线程之间的通信 http://blog.csdn.net/u011068702/arti…