@NotThreadSafe
public class LazyInitRace{
private ExpensiveObject instance = null;
public ExpensiveObject getInstance(){
if(instance == null){
return new ExpensiveObject();
}
}
}使用@GuardedBy("this")加到属性上和synchronized加到方法上能够满足保证instance不会出现两个吧?
public class LazyInitRace{
private ExpensiveObject instance = null;
public ExpensiveObject getInstance(){
if(instance == null){
return new ExpensiveObject();
}
}
}使用@GuardedBy("this")加到属性上和synchronized加到方法上能够满足保证instance不会出现两个吧?
解决方案 »
- 菜鸟请教各位帮忙解答下。。。
- 在java里如何手动结束进程
- 谁介绍几本学习java的书啊?
- 终于三颗星了,散分
- [求助]关于JColorChooser的应用问题?
- 各位老师,我想请教一个问题啊,WEB开发方面二个页面session有效期的问题
- Menu换成JMenu后就有问题了
- 请教:关于用java编写时间同步服务器?(200分相送)
- applet能向所属的服务器写数据吗?能在它和其服务器之间建立某种信用关系,来达到写数据的功能吗?
- 服务器和客户端,客户端发送数据量很小,但是有海量的客户端
- java.text.NumberFormat 格式化数值 四舍五入问题, 求解
- 算法可视化软件中的线程设计
static class SingletonHolder {
static Singleton instance = new Singleton();
}
public static Singleton getInstance() {
return SingletonHolder.instance;
}
}
另外,你的getinstance方法还是有点小问题的。
{
private Singel s=null;
private Singel(){}
public Singel getInstance(){
if(s==null){
synchronized(Singel.class){
if(s==null)
s=new Singel();
}
}
return s;
}
}
单例设计模式中的懒汉式,由于同步函数的方式每一次都会要判断锁,造成效率低。所以,可采用双重判断的形式,只需要判断一次即可。
class Singleton {
private static Singleton instance=new Singleton();
private Singleton(){}
static Singleton getInstance() {
return instance;
}
}
而懒汉式在没有多线程的情况下可以这样写
class Singleton {
private static Singleton instance=null;
private Singleton(){}
static Singleton getInstance() {
if(instance==null)
instance=new Singleton();
return instance;
}
}
楼主那个倒是可以用,因为人家可以随便new。