推荐写法:
public class TestSington {
private static TestSington instance;
public static TestSington getIntance() {
return Holder.instance;
}
public void init() {
// dosomething
}
private static class Holder {
static TestSington instance = new TestSington();
static {
instance.init();
}
}
}
init函数适用于某些单例初始化需要参数配置的情况,若该单例的构造函数在初始化时需要参数,也可在static块中进行配置;
原理是利用了static第一次访问时必定会加载的运行机制结果,这样可以保证线程安全并在第一次getInstance时初始化,并省略了synchronized,节约资源;