java之ThreadLocal简单使用总结
2017-07-22 17:16
393 查看
1、介绍ThreadLocal
看安卓源码的时候,在这个类Looper.java ,会有这个一句函数static final ThreadLocal<Looper> sThreadLocal = new ThreadLocal<Looper>();
一开始我不是很懂ThreadLocal.java这个类,简单理解
ThreadLocal 就是把变量分成很多个拷贝,每个线程拥有一个,比如说一个变量使用ThreadLocal修饰,则在线程中会创建这个变量的副本进行操作.操作不会受另外一个线程影响.
2、常用API
ThreadLocal.java1、构造函数
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修饰的变量,感觉就是每个线程都拥有一份原始数据的拷贝,每个线程只能修改自己的数据,其它线程不可以修改相关文章推荐
- java之简单的Callback使用总结
- Msgpack0.6.12 java版简单使用总结
- 简单总结Java IO中stream流的使用方法
- java中Callback简单使用总结
- Jsp+servlet+javabean使用Lucene3.6.2做一个简单数据库搜索的总结(2)
- Java ThreadLocal示例及使用方法总结
- java之MessageDigest简单使用总结
- Jsp+servlet+javabean使用Lucene3.6.2做一个简单数据库搜索的总结(1)
- Java基础课程学习总结,使用LinkedList简单模拟队列数据结构和堆栈数据结构的实现
- final关键字java中使用的简单总结
- 重拾java基础(十九):GUI简单使用总结
- java简单总结1(对象的基本概念)
- java中调用SQLite的简单经验总结!
- java连接postgreSQL数据库简单使用
- Java中ThreadLocal的设计与使用
- PHP学习使用资源简单总结
- Java1.5语言新特性简单总结
- 面向 Java 开发人员的 Ajax: 结合 Direct Web Remoting 使用 Ajax----数据序列化不可能比这更简单了!
- Java中ThreadLocal的设计与使用
- JDK1.5使用总结 --《Java 1.5 Tiger: A Developer's Notebook》