请教一个Singleton的问题?

03-10-29 nitmithv
    

我看到一段别人使用Singleton的代码.

public class MainDataSource

{

private static MainDataSource singleton;

public static MainDataSource getInstance()

{

if (singleton == null)

{

singleton = new MainDataSource();

ocdbm = new OracleConnDBMrgr();

ocdbm.setLoacation(JobProperty.JOBORACLEDS);

}

return singleton;

}

}

在这个Singleton中,没有用到synchronized,可能会产生多个单实例,这样是不是跟Singleton的宗旨有所违背?

请指点.

    

banq
2003-10-29 11:35

严格来说应该加上synchronized,但是一般项目访问密集度没有那么高,所以有的开发者就忽略了,也是可行的。

nitmithv
2003-10-29 20:52

可是下午我问一同事的时候,他说这样就是允许产生多实例,生成一个实例缓冲池.我觉得这样挺纳闷的,如果这样做的话,就没必要用单实例了.

还请各位指点.

Swallor
2003-10-31 10:59

我不同意banq的想法,一般的应用更应同步!当确实影响性能的时候才考虑用对象缓冲池。

chinahero
2003-11-23 20:04

如果不加同步关键字,如果线程刚好在==null时切换,会产生多个实例,但是我想由于即使用产生多个实例,也不会影响系统运行结果,和银行存取钱的那个例子不一样,没有需要互斥的操作,所以这段代码运行中,有多个实例,但不是太多,也就是所以的对象池,不知道我的想法对不对

2Go 1 2 下一页