/**
* JDBCConnection for Singleton
* 双重检查加锁方法,由于JVM内部的问题,该方法还是有漏洞的。
* 假设线程1进入到步骤2,执行步骤3未完成,会先将instance设为非null值。
* 这时候线程2会在判断instance==null的时候失败,返回一个不完整的intance对象。
*
* 尝试最佳实现方法。在该方法中,Singleton有一个private类型静态内部类,
* 内部类在外部类加载的时候并不会加载,只有在调用getInstance方法的时候加载SingletonHolder类。
* 分析:
* 类载入到jvm的时候,会进行初始化,但是只会初始化static成员和static代码块,
* 而不会初始化静态内部类的成员。因此,只有实际调用getInstance的时候,
* 才会初始化静态内部类的静态成员。做到了延迟加载。
* 同时,jvm的类加载机制保证了绝对不会出现同步问题,避免了双检查锁。
* 优点:延迟加载,而且不需要同步。
* @author Zephyr.Qiao
*
*/