java之ThreadLocal简单使用总结
来源:互联网 发布:数控线切割编程视频 编辑:程序博客网 时间:2024/06/06 02:54
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>(){ @Override protected 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修饰的变量,感觉就是每个线程都拥有一份原始数据的拷贝,每个线程只能修改自己的数据,其它线程不可以修改
阅读全文
0 0
- java之ThreadLocal简单使用总结
- java.lang.ThreadLocal的简单使用
- java之简单的Callback使用总结
- java之MessageDigest简单使用总结
- Java 之 ThreadLocal学习
- Java多线程之ThreadLocal
- java 之 ThreadLocal学习
- Java多线程之ThreadLocal
- Java基础之ThreadLocal
- Java线程之ThreadLocal
- java之ThreadLocal笔记
- JAVA多线程之ThreadLocal
- java线程之ThreadLocal
- Java多线程之 ThreadLocal
- Java基础 之ThreadLocal
- java多线程之ThreadLocal
- Java基础之ThreadLocal
- Java多线程之----ThreadLocal
- 配置PCA的一点总结12单片机
- 利用pywinauto模块打开一个应用,输入参数,点击应用中的按钮,获取数据
- 【OpenStack源码分析之七】openstack中的RPC请求分析
- ios成长之路 Navigation的统一布局
- 如何在HTTP客户端与服务器端之间保持状态 ?总结笔记
- java之ThreadLocal简单使用总结
- CDH集群开启Kerberos安全认证
- java中方法的参数传递机制
- HDU2612 BFS优化
- POJ3461-字符串匹配(基础)
- 宏EXPORT_SYMBOL在内核中的作用
- 15-Vue 之计算属性
- 二叉树的最近公共祖先、两个最远节点、第K层结点个数、出现次数超过一半的元素
- python assert 断言详细用法格式