双检查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;
}
}
本文探讨了双重检查锁定模式在并发环境下的应用,并对比了一种更优的懒汉式单例模式实现——Initialization on Demand Holder,该模式利用Java内部类机制确保线程安全,无需额外同步。
3160

被折叠的 条评论
为什么被折叠?



