双检查double-check
public static JCoDestination getJcoConnectionPool() {
if (null != jcoDestination) {
return jcoDestination;
}
try {
synchronized (JcoConnectionPoolFactory.class) {
if(null == jcoDestination){
connect();
//得到连接
jcoDestination = JCoDestinationManager.getDestination(ABAP_AS_POOLED);
}
}
} catch (JCoException e) {
e.printStackTrace();
logger.info("SAP JCO 连接失败!");
} catch (Exception e) {
e.printStackTrace();
logger.info("SAP JCO 连接异常!");
}
return jcoDestination;
}
更好的处理方式
Initialization on Demand Holder
依赖内部类机制,JLS来保证线程安全,不需要自己同步
public class Singleton{
private static class SingletonHolder{
private final static Singleton INSTANCE = new Singleton();
}
public static Singleton getInstance(){
return SingletonHolder.INSTANCE;
}
}