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

时间:2021-02-08 15:27:10

单例模式的主要作用是保证在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