大家好我是爱学习的张三:今天我们来看看实际中经常用到的单例模式的两种写法:
第一种; double check 双重检查
public class DubbleSingleton { private static DubbleSingleton ds ; public static DubbleSingleton getDs(){ if(ds == null){ synchronized (DubbleSingleton.class){ //线程都在这里等待 try { //假设创建对象的事件很长 这一秒钟就是模拟创建时间 Thread.sleep(1000); if(ds ==null){ ds = new DubbleSingleton(); } } catch (InterruptedException e) { e.printStackTrace(); } } } return ds; } public static void main(String[] args) { for(int a=0;a<3;a++){ new Thread(new Runnable() { @Override public void run() { System.out.println(DubbleSingleton.getDs().hashCode()); } }).start(); } } }
第二种 静态内部类
/** * 静态内部类实现单例模式 */ public class InnerSingle { private static class Singletions{ private static Singletions single = new Singletions(); } public static Singletions getSingletions(){ return Singletions.single; } public static void main(String[] args) { for(int a=0;a<3;a++){ new Thread(new Runnable() { @Override public void run() { System.out.println(InnerSingle.getSingletions().hashCode()); } }).start(); } } }