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>(){
		 @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修饰的变量,感觉就是每个线程都拥有一份原始数据的拷贝,每个线程只能修改自己的数据,其它线程不可以修改

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码莎拉蒂 .

你的鼓励是我最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值