关于静态变量和GC的问题.... 我没有看到你是怎么样初始化你得DBPool dp; 啊,是不是你写得有问题啊 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 因为你根本就没生成这个实例啊。private static DBPool dp;--->private static DBPool dp = new DBPool(...); 对不起大家,还有个方法忘了加紧去了, public static void init(DataSource ds) { System.out.println("Initializing DBPool...."); dp = new DBPool(ds); }我是通过这个方法来初始化 DBPool的。 同楼上的看法一样private static DBPool dp这里dp没有创建实例阿这个构造函数也是private的你怎么保证public static DBPool getInstance() { if (dp == null) { throw new IllegalStateException(); }中的dp!=null呢? 请问楼主你是怎么创建DBPool的实例的?DBPool s=new DBPool();?这样好像不行啊 楼上的,使用时 就用 DBPool db = DBPool.getInstance(); 是不是你的init函数没有被调用啊?其实没必要加这个函数,定义的时候初始化一下就成。private static DBPool dp=new DBPool(ds); //唯一静态实例 你的构造函数是private ,所以只能用getInstance 来实例化它,可是你在getInstance并没实例化它,Singleton 模式好像在getInstance中要加上if (dp == null) { return new DBPool(ds);}而且你的getInstance 要加上参数(DataSource ds) 老大们,看清楚我的问题,我没问你们关于singleton模式的问题,我是问静态变量和GC的问题。 你肯定多次调用了init函数。虽然你的本已是Singleton模式,但你的init函数其实间接充当了构造函数,每次调用都会重复初始化。你查找一下代码是否有多次重复调用init函数的情况。 呵呵,坚决同意楼上。肯定有重复调用,所以应该这样才能保证实例唯一的说:public static void init(DataSource ds) { if(dp == null){ System.out.println("Initializing DBPool...."); dp = new DBPool(ds); } } 你的getInstance()函数写的不太好,改成下面的写法较好public static DBPool getInstance() { if (dp == null) { dp=new DBPool(); } return dp;} 排序问题 !!!!急!!!! int取整的问题 我的程序编译有问题,请帮忙改正! 总是报错说"无法从静态上下文中引用非静态变量this" 为什么不能定义抽象构造函数和抽象静态方法? 如何获得一个(20~30)之间的随机数. 小问题 Tomcat+Oracle问题 Java获取文件名的问题 请问怎么往JBuilder自带的DataStore数据库【或别的数据库】中插入Image对象? 在java中如何模拟一段连续的内存空间———请各位大哥大姐不吝赐教
private static DBPool dp;
--->
private static DBPool dp = new DBPool(...);
System.out.println("Initializing DBPool....");
dp = new DBPool(ds);
}我是通过这个方法来初始化 DBPool的。
private static DBPool dp
这里dp没有创建实例阿
这个构造函数也是private的
你怎么保证public static DBPool getInstance() {
if (dp == null) {
throw new IllegalStateException();
}
中的dp!=null呢?
DBPool s=new DBPool();?
这样好像不行啊
其实没必要加这个函数,定义的时候初始化一下就成。
private static DBPool dp=new DBPool(ds); //唯一静态实例
你的构造函数是private ,所以只能用getInstance 来实例化它,可是你在getInstance并没实例化它,Singleton 模式好像在getInstance中要加上
if (dp == null) {
return new DBPool(ds);
}
而且你的getInstance 要加上参数(DataSource ds)
你查找一下代码是否有多次重复调用init函数的情况。
if(dp == null){
System.out.println("Initializing DBPool....");
dp = new DBPool(ds);
}
}
public static DBPool getInstance()
{
if (dp == null)
{
dp=new DBPool();
}
return dp;
}