14.线程单例:线程单例和单例模式的区别???如何实现线程单例???
学习:第7遍
1.线程单例和单例模式的区别???
单例模式:在整个应用程序中只有一个实例
线程单例:为每个线程提供一个实例 同一个线程获取的是一个实例 不同线程获取的是不同的实例
2.如何实现线程单例???
Java中提供了一个ThreadLocal,直接提供了线程单例的解决方案 用于管理变量,提供了线程局部变量 它为变量在每个线程中都存储了一个本地的副本 ThreadLocal:本质是Map集合,将线程当做key,保证线程唯一
public class Test {
static MyThreadLocal
<User> localDIY
=new MyThreadLocal<User>();
static ThreadLocal
<String> local
=new ThreadLocal<String>();
public static void main(String
[] args
) {
localDIY
.set(new User());
System
.out
.println(localDIY
.get());
local
.set("aaa");
local
.set("bbb");
local
.set("ccc");
System
.out
.println(local
.get());
System
.out
.println(local
.get());
System
.out
.println(local
.get()==local
.get());
new Thread(new Runnable() {
@Override
public void run() {
System
.out
.println(local
.get());
}
}).start();
}
}
class User {
public User() {
System
.out
.println("User.User()");
}
}
class MyThreadLocal<T> {
private Map
<Thread, T> map
= new HashMap<>();
public void set(T t
) {
map
.put(Thread
.currentThread(), t
);
}
public T
get() {
return map
.get(Thread
.currentThread());
}
}