Java基础--单例类创建和测试

单例模式的主要作用是保证在Java程序中,某个类只有一个实例存在。单例模式有很多好处,它能够避免实例对象的重复创建,不仅可以减少每次创建对象的时间开销,还可以节约内存空间;能够避免由于操作多个实例导致的逻辑错误。

如果一个对象有可能贯穿整个应用程序,而且起到了全局统一管理控制的作用,那么单例模式也许是一个值得考虑的选择。一些管理器和控制器常被设计成单例模式。

 

实现1-普通

public class SingletonClass {
    
    private static final SingletonClass INSTANCE = new SingletonClass();

    private SingletonClass() {
    }
    
    public static SingletonClass getInstance()
    {
        return INSTANCE;
    }

}

---借助AccessibleObject.setAccessible方法,通过反射机制调用私有构造器会破坏Singleton

 

实现2-枚举

public enum EnumSingleton {
    
    INSTANCE;

    public String other() {
        return "other";
    }

}

---利用枚举的特性

 

实现3-静态内部类

public class Singleton {

    private static class SingletonHolder {    
       private static final Singleton INSTANCE = new Singleton();    
     }

     private Singleton (){ }   
 
     public static final Singleton getInstance() {    
        return SingletonHolder.INSTANCE;    
     } 
}

 

---

 

单例测试类: 

 

class SingletonTest implements Runnable {

    private static CountDownLatch latch = new CountDownLatch(1);

    static Set<String> set = new ConcurrentSkipListSet<String>();

    @Override
    public void run() {
        try {
            latch.await();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        set.add(SingletonClass2.getInstance().toString());
    }

    public static void main(String[] args) throws Exception {

        for (int k = 0; k < 2000; k++) {
            SingletonTest tt = new SingletonTest();
            Thread t = new Thread(tt);
            t.start();
        }

        //释放锁
        latch.countDown();

        Thread.sleep(2000);

        System.out.println(set.size());
    }
}

 

 

 

---

 

end

posted @ 2016-09-03 18:23  dahuandahuan  阅读(224)  评论(0编辑  收藏  举报