public class LazyNotSecurtySingleton {
/**
* 此时静态变量不能声明为final,因为需要在工厂方法中对它进行实例化
*/
private static LazyNotSecurtySingleton instance;
/**
* 私有构造子,确保无法在类外实例化该类
*/
private LazyNotSecurtySingleton() {
}
/**
* 这里可能会有线程同步问题
*/
public static LazyNotSecurtySingleton getInstance() {
if (instance == null) {
instance = new LazyNotSecurtySingleton();
}
return instance;
}
}
/**
* 此时静态变量不能声明为final,因为需要在工厂方法中对它进行实例化
*/
private static LazyNotSecurtySingleton instance;
/**
* 私有构造子,确保无法在类外实例化该类
*/
private LazyNotSecurtySingleton() {
}
/**
* 这里可能会有线程同步问题
*/
public static LazyNotSecurtySingleton getInstance() {
if (instance == null) {
instance = new LazyNotSecurtySingleton();
}
return instance;
}
}
解决方案 »
- 初学hibernate遇到的问题,请帮忙解决
- hibernate在update操作时提示unexpected AST node错误
- 提交from表单出现500错误
- servlet连接sql server2000出错
- 请教Servlet中getServletContext和getServletConfig的区别
- 急求解决办法 没人答就吃不上饭了
- spring和hibernate结合配置两个数据源的问题
- 探讨一下:jstl标签与 struts标签哪个好???
- request.removeAttribute为什么移不掉值???在线等
- 不知道我这个编程习惯好不好?
- struts2后台接收不到值id 加上getter方法 就可以了 有一个属性能接收到 为什么?
- ant build 构建问题
饿汉式:instance在类装载时就实例化第二种(懒汉 线程安全)public class LazySecurtySingleton {
/**
* 此时静态变量不能声明为final,因为需要在工厂方法中对它进行实例化
*/
private static LazySecurtySingleton instance;
/**
* 私有构造子,确保无法在类外实例化该类
*/
private LazySecurtySingleton() {
}
/**
* synchronized关键字解决多个线程的同步问题
*/
public static synchronized LazySecurtySingleton getInstance() {
if (instance == null) {
instance = new LazySecurtySingleton();
}
return instance;
}
}第三种(饿汉式)
//只要Singleton类被装载了,那么instance就会被实例化(没有达到lazy loading效果)
public class EagerSingleton {
/** 通过静态变量初始化的类实例 */
private static final EagerSingleton instance = new EagerSingleton();
/**
* 私有的默认构造子
*/
private EagerSingleton() {
}
/**
* 获取唯一类实例的静态工厂方法
*/
public static EagerSingleton getInstance() {
return instance;
}
}第四种(饿汉,变种)
//只要Singleton类被装载了,那么instance就会被实例化(没有达到lazy loading效果)
public class EagerNotNormalSingleton {
private static EagerNotNormalSingleton instance = null;
static {
instance = new EagerNotNormalSingleton();
}
private EagerNotNormalSingleton() {
}
public static EagerNotNormalSingleton getInstance() {
return instance;
}
}
参考下:http://blog.csdn.net/withiter/article/details/8140338
[code=java][/ public final synchronized Connection getConnection(String connectionName) {
.......省略 }]
这个方法声明为static的,这样就不用new对象了