设计模式 - 创建型(单例模式)
单例模式:通过单例模式的方法创建的类在当前进程中只有一个实例(根据需要,也有可能一个线程中属于单例,如:仅线程上下文内使用同一个实例,分布式中使用同一个实例)
模块之间的单例模式
单例模式同时分为饿汉模式和懒汉模式
饿汉模式
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);
}
}
}