标签:对象 在线 class 设置 red 内存 自己 == time
在多线程环境下,使用和共享对象时有四种常用策略:
ThreadLocal
== 类;ThreadLocal
基本思想实现线程封闭的方式之一是栈封闭,只能通过局部变量才能访问对象,而局部变量是封闭在执行的线程中的,其他线程无法修改。另一片博文展开讲解。
ThreadLocal
是为每个使用变量的线程都存有一个独立的副本,因此每个线程对此变量的修改都是都只是在自己工作内存而已,也没有同步内存的时间开销。因此也可以说栈封闭是用空间换时间和安全性。
如果对象的分配开销特别高或者在线程中执行的频率特别高,则应该使用ThreadLocal。
T iniinitialValue()
:初始化当前线程副本值;T get()
:返回此线程中thread-local变量副本值,如果当前线程没有对应副本值,则会调用iniinitialValue
方法返回;set(T value)
:设置当前线程副本值;remove()
:移除当前线程局部变量副本值。示例:
public class ThreadLocalDemo implements Runnable {
private static ThreadLocal<Integer> threadLocalVal=new ThreadLocal<Integer>(){
@Override
protected Integer initialValue() {
return 1;
}
};
public Integer getThreadLocalVal() {
return threadLocalVal.get();//fixme 返回的只是Integer变量的副本而已
}
@Override
public void run() {
Integer i=threadLocalVal.get();
while(true){
System.out.println(i++);
try {
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
new Thread(new ThreadLocalDemo()).start();
new Thread(new ThreadLocalDemo()).start();
}
}
标签:对象 在线 class 设置 red 内存 自己 == time
原文地址:https://www.cnblogs.com/dugk/p/8973738.html