1.这样写会出现空指针问题。。是因为加载时instance为空?synchronized不能锁null?
2.上网查了一下,然后改成了锁ConnFactory.class,是什么意思?给类文件加锁?
private static ConnFactory instance;
private ConnFactory(){}
public static ConnFactory newInstance(){
if(instance==null){
synchronized(instance){
if(instance == null)
instance = new ConnFactory();
}
}
return instance;
}
2.上网查了一下,然后改成了锁ConnFactory.class,是什么意思?给类文件加锁?
private static ConnFactory instance;
private ConnFactory(){}
public static ConnFactory newInstance(){
if(instance==null){
synchronized(instance){
if(instance == null)
instance = new ConnFactory();
}
}
return instance;
}
这个办法在Java5之前是肯定不好使的。
所谓的懒汉式,可以利用内部static类来实现。
如何实现?
instance = new ConnFactory();
对于这么一条语句,有两个执行步骤。
1.为instance分配空间。
2.调用ConnFactory的构造函数初始化状态。
如果有线程A和B几乎在同一时刻同时调用newInstance方法,假设A先进入。
如果A线程刚为instance开辟了空间,即步骤A,cpu就切换去执行B线程的任务了,这时候B线程发现instance已经不是null,于是它边把instance拿来用,这时候就可能出问题了。因为instance实例的状态还没有初始化。
private ConnFactory(){}
public synchronized static ConnFactory newInstance(){
if(instance==null){
instance = new ConnFactory();
}
return instance;
}
这个?
锁方法每次都要请求锁,然后判断是否为空我想知道锁类名.class是什么意思???
锁class
public static ConnFactory newInstance(){
if(instance==null){
synchronized(ConnFactory){
if(instance == null)
instance = new ConnFactory();
}
}
return instance;
}