final 是会出现问题的,

板桥的写法有误,请看我在板桥基础上些的测试用例(java的缺省构造):
public class Singleton {
private static Singleton instance = null;

public static synchronized Singleton getInstance() {

if (instance==null)
instance = new Singleton();
return instance;
}

public static void main(String[] args){
Singleton aa = new Singleton();
System.out.println (aa);
Singleton bb = new Singleton();
System.out.println (bb);
}
}

为了更加说明问题,请运行下面程序(注意:Singleton类是原文)
class Singleton {
private static Singleton instance = null;
//private Singleton(){}

public static synchronized Singleton getInstance() {

if (instance==null)
instance = new Singleton();
return instance;
}

}

public class Test{
public static void main(String[] args){
Singleton aa = new Singleton();
System.out.println (aa);
Singleton bb = new Singleton();
System.out.println (bb);
}
}

为什么说第二式比第一式有效率?
第一式中的private static Singlton instance = new Singlton();
不管在什么线程环境下不 是都只初始化一次吗?
并且只有一个实例。

构建器必须要限定为private, 不然就会出现cafe所说的情况。设为private就限定了只有在这一个类里面可以使用构建器创建实例,达到控制的目的。cafe列举的两个例子当中,之所以出现两个实例是因为,它们都是通过构建器创建,而且构建器不是private。如果使用private,第二个例子编译是不会通过的,第一个因为在同一个类里面,可以随便创建。

我想用singleton模式实现数据库的连接怎么写,因为有一些系统数据我想获得以后大家都使用这个,但是有些数据库的数据必须有参数取得?怎么解决?