java之ThreadLocal简单使用总结
【摘要】 1、介绍ThreadLocal
看安卓源码的时候,在这个类Looper.java ,会有这个一句函数
static final ThreadLocal<Looper> sThreadLocal = new ThreadLocal<Looper>();
一开始我不是很懂ThreadLocal.java这个类,简单理解
 ...
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;
-
}
-
@Override
-
public 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修饰的变量,感觉就是每个线程都拥有一份原始数据的拷贝,每个线程只能修改自己的数据,其它线程不可以修改
文章来源: chenyu.blog.csdn.net,作者:chen.yu,版权归原作者所有,如需转载,请联系作者。
原文链接:chenyu.blog.csdn.net/article/details/75770226
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)