ThreadLocal的作用是提供线程内的局部变量,这种单例属于线程内部安全。
那假如使用ThreadLocal,那就是用空间换时间的方式。
public class ThreadLocalSingleton {private ThreadLocalSingleton() {}private static final ThreadLocal<ThreadLocalSingleton> singleton = new ThreadLocal<ThreadLocalSingleton>() {@Overrideprotected ThreadLocalSingleton initialValue() {return new ThreadLocalSingleton();}};public static ThreadLocalSingleton getInstance() {return singleton.get();}}
测试
public class ThreadLocalSingletonTest {public static void main(String[] args) {System.out.println(ThreadLocalSingleton.getInstance());System.out.println(ThreadLocalSingleton.getInstance());Thread t1 = new Thread(new Runnable() {@Overridepublic void run() {ThreadLocalSingleton singleton = ThreadLocalSingleton.getInstance();System.out.println(Thread.currentThread().getName() + ":" + singleton);}});t1.start();}}
