package cn.bufanli.test.singleton;
/**
* 单例&多线程
* 单例模式,最常见的就是饥饿模式和懒汉模式,一个直接实例化对象
* 一个在调用方法时进行实例化对象,在多线程中,考虑到性能和线程安全问你题,
* 我们一般选择下面两种单例模式,在提高性能的同时,又保证了线程安全
* dubble check instance 两次确认
* static inner class 静态内部类
*/
public class singletonThreadDemo {
}
Dubble check instance
package cn.bufanli.test.singleton;
public class DubbleSingleton {
private static DubbleSingleton ds;
public static DubbleSingleton getDS(){
if(ds == null){
try {
//模拟初始化对象的准备时间..
Thread.sleep(3000);
}catch(Exception e){
e.printStackTrace();
}
synchronized (DubbleSingleton.class){
if(ds == null){
ds = new DubbleSingleton();
}
}
}
return ds;
}
public static void main(String[] args) {
Thread t1 = new Thread(() -> {
System.out.println(DubbleSingleton.getDS().hashCode());
},"t1");
Thread t2 = new Thread(() -> {
System.out.println(DubbleSingleton.getDS().hashCode());
},"t2");
Thread t3 = new Thread(() -> {
System.out.println(DubbleSingleton.getDS().hashCode());
},"t3");
t1.start();
t2.start();
t3.start();
}
}
static inner class
package cn.bufanli.test.singleton;
public class Singleton {
private static class InnerSingleton{
private static Singleton single = new Singleton();
}
public static Singleton getInstance(){
return InnerSingleton.single;
}
}