ThreadLocal的作用是提供线程内的局部变量,这种单例属于线程内部安全。
    那假如使用ThreadLocal,那就是用空间换时间的方式。

    1. public class ThreadLocalSingleton {
    2. private ThreadLocalSingleton() {
    3. }
    4. private static final ThreadLocal<ThreadLocalSingleton> singleton = new ThreadLocal<ThreadLocalSingleton>() {
    5. @Override
    6. protected ThreadLocalSingleton initialValue() {
    7. return new ThreadLocalSingleton();
    8. }
    9. };
    10. public static ThreadLocalSingleton getInstance() {
    11. return singleton.get();
    12. }
    13. }

    测试

    1. public class ThreadLocalSingletonTest {
    2. public static void main(String[] args) {
    3. System.out.println(ThreadLocalSingleton.getInstance());
    4. System.out.println(ThreadLocalSingleton.getInstance());
    5. Thread t1 = new Thread(new Runnable() {
    6. @Override
    7. public void run() {
    8. ThreadLocalSingleton singleton = ThreadLocalSingleton.getInstance();
    9. System.out.println(Thread.currentThread().getName() + ":" + singleton);
    10. }
    11. });
    12. t1.start();
    13. }
    14. }