美文网首页
“单例”模式-ThreadLocal线程单例

“单例”模式-ThreadLocal线程单例

作者: wbpailxt | 来源:发表于2019-11-24 18:23 被阅读0次

标题中单例之所以带着双引号,是因为并不能保证整个应用全局唯一,但是可以保证线程唯一。

package com.geely.design.pattern.creational.singleton;

/**
 * Created by geely
 */
public class ThreadLocalInstance {
    private static final ThreadLocal<ThreadLocalInstance> threadLocalInstanceThreadLocal
             = new ThreadLocal<ThreadLocalInstance>(){
        @Override
        protected ThreadLocalInstance initialValue() {
            return new ThreadLocalInstance();
        }
    };
    private ThreadLocalInstance(){

    }

    public static ThreadLocalInstance getInstance(){
        return threadLocalInstanceThreadLocal.get();
    }
}
package com.geely.design.pattern.creational.singleton;

/**
 * Created by geely
 */
public class T implements Runnable {
    @Override
    public void run() {
        ThreadLocalInstance instance = ThreadLocalInstance.getInstance();
        System.out.println(instance);
    }
}

测试类:

package com.geely.design.pattern.creational.singleton;

/**
 * Created by geely
 */
public class Test {
    public static void main(String[] args){
        System.out.println("main thread "+ThreadLocalInstance.getInstance());
        System.out.println("main thread "+ThreadLocalInstance.getInstance());
        System.out.println("main thread "+ThreadLocalInstance.getInstance());

        Thread thread0 = new Thread(new T());
        Thread thread1 = new Thread(new T());
        thread0.start();
        thread1.start();
    }
}

结果:


图片.png

两个线程(线程0和线程1)拿到的对象并不是同一个对象,但是同一线程能保证拿到的是同一个对象,即线程单例。
ThreadLocal是基于ThreadLocalMap来实现的,所以我们在调用get方法的时候,默认走的就是这个map,不用指定key,它维持了线程间的隔离。
ThreadLocal隔离了多个线程对数据的访问冲突。对多线程资源共享的问题,假如使用的是同步锁,那么就是以时间换空间的方式;那假如使用ThreadLocal,那就是用空间换时间的方式。

相关文章

  • “单例”模式-ThreadLocal线程单例

    标题中单例之所以带着双引号,是因为并不能保证整个应用全局唯一,但是可以保证线程唯一。 测试类: 结果: 两个线程(...

  • 单例模式Java篇

    单例设计模式- 饿汉式 单例设计模式 - 懒汉式 单例设计模式 - 懒汉式 - 多线程并发 单例设计模式 - 懒汉...

  • 设计模式

    手写单例模式(线程安全) 你知道几种设计模式?单例模式是什么?Spring中怎么实现单例模式?

  • Java多线程--并行模式与算法

    Java多线程--并行模式与算法 单例模式 虽然单例模式和并行没有直接关系,但是我们经常会在多线程中使用到单例。单...

  • 单例模式

    单例模式介绍 把单例模式放到多线程基础这块,是因为单例和多线程有一点的关系。何为单例模式? 在它的核心结构中只包含...

  • 设计模式——单例模式的破坏

    概述: 之前学习了单例模式的几种实现,解决了多线程情况下,单例的线程安全问题,保证了单例的实现。但是单例模式在下面...

  • Singleton 单例模式

    饿汉式单例模式 饿汉式单例模式 通过静态代码块增加异常处理 懒汉式单例模式 存在线程安全问题 懒汉式单例模式 解决...

  • 设计模式(2) 单例模式

    单例模式 线程安全的Singleton 会破坏Singleton的情况 线程级Singleton 单例模式是几个创...

  • kotlin实现单例模式

    1.懒汉式实现单例模式 2.线程安全懒汉式实现单例模式 3.双重校验懒汉式实现单例模式 4.静态内部类方式实现单例模式

  • 单例模式

    单例模式 单例模式:用来保证一个对象只能被创建一次。 普通版 代码实现如下 同步锁单例 单例模式如果再多线程中使用...

网友评论

      本文标题:“单例”模式-ThreadLocal线程单例

      本文链接:https://www.haomeiwen.com/subject/grohwctx.html