设计模式 - 创建型(单例模式)

设计模式 - 创建型(单例模式)

单例模式:通过单例模式的方法创建的类在当前进程中只有一个实例(根据需要,也有可能一个线程中属于单例,如:仅线程上下文内使用同一个实例,分布式中使用同一个实例)

模块之间的单例模式

单例模式同时分为饿汉模式和懒汉模式
饿汉模式

public class StarvationMode {
	//构造方法私有
    private StarvationMode() {

    }
	//直接实例化
    private static StarvationMode instance = new StarvationMode();

	//暴露的静态方法
    public static StarvationMode getInstance() {
        return instance;
    }
}

懒汉模式

public class IdlerMode {
	//构造方法私有
    private IdlerMode() {

    }

    private static IdlerMode instance;
	
    public static IdlerMode getInstance() {
        if (null == instance) {
            instance = new IdlerMode();
        }
        return instance;
    }
}

线程之间的单例模式

实用性并不是很大

public class ThreadIdlerMode {

    private static final ConcurrentHashMap<String, ThreadIdlerMode> instances
            = new ConcurrentHashMap<String, ThreadIdlerMode>();

    private ThreadIdlerMode() {
    }

    public static ThreadIdlerMode getInstance() {
        String threadName = Thread.currentThread().getName();
        if (null == instances.get(threadName))
            instances.putIfAbsent(threadName, new ThreadIdlerMode());
        return instances.get(threadName);
    }

    public static void main(String[] args) {
        new Thread(new Runnable() {
            @Override
            public void run() {
                ThreadIdlerMode.getInstance();
            }
        }, "thread_one").start();

        new Thread(new Runnable() {
            @Override
            public void run() {
                ThreadIdlerMode.getInstance();
            }
        }, "thread_two").start();

        new Thread(new Runnable() {
            @Override
            public void run() {
                ThreadIdlerMode.getInstance();
            }
        }, "thread_one").start();

        for (String s : instances.keySet()) {
            System.out.println(s);
        }
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值