java-ThreadLocal简介
来源:互联网 发布:易编程手机 编辑:程序博客网 时间:2024/05/22 19:26
android中的Looper类,使用了ThreadLocal保存每个线程的Looper
static final ThreadLocal<Looper> sThreadLocal = new ThreadLocal<Looper>();
简单了解下ThreadLocal的概念和使用。
(一)概念
ThreadLocal为每个线程提供变量的副本,该变量线程间独立不影响。
(二)使用
/** * ThreadLocal用法测试 * * @author peter_wang * @create-time 2014-12-24 下午8:15:47 */public class ThreadLocalDemo { private static ThreadLocal<Integer> num = new ThreadLocal<Integer>(){ //提供初始化,不实现初始化方法首次使用get()的时候也需要初始化对象 protected Integer initialValue() { return 0; }; }; private static class ThreadLocalThread extends Thread { @Override public void run() { for (int i = 0; i < 3; i++) { num.set(num.get() + 1); System.out.println("Thread name is " + getName() + ",num is " + num.get()); } } } /** * @param args */ public static void main(String[] args) { ThreadLocalThread thread1 = new ThreadLocalThread(); thread1.start(); ThreadLocalThread thread2 = new ThreadLocalThread(); thread2.start(); }}
运行结果:
Thread name is Thread-0,num is 1
Thread name is Thread-1,num is 1
Thread name is Thread-1,num is 2
Thread name is Thread-1,num is 3
Thread name is Thread-0,num is 2
Thread name is Thread-0,num is 3
ThreadLocal和线程同步机制都是为了解决多线程中相同变量的访问冲突问题。ThreadLocal提供变量拷贝,线程间独立,访问效率高,用“空间换时间”;线程同步机制对变量进行线程间访问互斥锁,变量多线程共享,访问效率低,处理负责,用“时间换空间”。
ThreadLocal不是用来解决变量线程共享安全的,而是提供了保存对象的方法。
(四)源码分析
查看源码,每个Thread中都带有ThreadLocal.ThreadLocalMap变量
在ThreadLocal中将变量和Thread通过map绑定
public void set(T value) { Thread t = Thread.currentThread(); //获取ThreadLocalMap绑定该线程和对象变量 ThreadLocalMap map = getMap(t); if (map != null) map.set(this, value); else createMap(t, value); }
ThreadLocalMap getMap(Thread t) { return t.threadLocals; }
0 0
- java-ThreadLocal简介
- Java 多线程之--ThreadLocal 简介
- java的ThreadLocal简介和示例
- ThreadLocal简介
- ThreadLocal简介
- 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
- OC语言-self
- 去掉超链接或按钮点击时出现的虚线边框
- android2.3平台上web页面(html5中使用frame)不能滑动的解决方法
- 阿里云产品分析(3):阿里云服务器云引擎ACE可用性分析与案例
- HDOJ 题目3250 Bad Hair Day(技巧)
- java-ThreadLocal简介
- zoj 2109 简单贪心背包
- backtracking 算法讲解
- poj 1651 Multiplication Puzzle(区间dp)
- ORACLE—008:分类统计
- WinForm 中 comboBox控件之数据绑定
- C语言中你不知道的事(3)-- 函数指针、指针数组及数组指针
- 9.5(1)循环填充:输出1000以内个位数为6且能被三整除的正整数
- 阿里云产品分析(4):阿里云关系型数据库RDS可用性分析与案例