|
|
|
我看到一段别人使用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的宗旨有所违背?
请指点.
|
|
|
|
|
|
Re: 请教一个Singleton的问题?
|
2003年10月29日 11:35
|
|
|
|
严格来说应该加上synchronized,但是一般项目访问密集度没有那么高,所以有的开发者就忽略了,也是可行的。
|
|
|
|
|
|
Re: 请教一个Singleton的问题?
|
2003年10月29日 20:52
|
|
|
可是下午我问一同事的时候,他说这样就是允许产生多实例,生成一个实例缓冲池.我觉得这样挺纳闷的,如果这样做的话,就没必要用单实例了.
还请各位指点.
|
|
|
|
|
|
Re: 请教一个Singleton的问题?
|
2003年10月31日 10:59
|
|
|
|
我不同意banq的想法,一般的应用更应同步!当确实影响性能的时候才考虑用对象缓冲池。
|
|
|
|
|
|
Re: 请教一个Singleton的问题?
|
2003年11月23日 20:04
|
|
|
|
如果不加同步关键字,如果线程刚好在==null时切换,会产生多个实例,但是我想由于即使用产生多个实例,也不会影响系统运行结果,和银行存取钱的那个例子不一样,没有需要互斥的操作,所以这段代码运行中,有多个实例,但不是太多,也就是所以的对象池,不知道我的想法对不对
|
|
|
|
|
|
Re: 请教一个Singleton的问题?
|
2003年11月24日 11:48
|
|
|
|
是可以产生多个实例,但只有一个不是悬空的,其他的都注定要被垃圾回收。
|
|
|
|
|
|
Re: 请教一个Singleton的问题?
|
2003年11月26日 13:28
|
|
|
|
不太理解楼上的,对象的引用已经返回给客户端,怎么断定只有一个不是悬空的呢?
|
|
|
|
|
|
Re: 请教一个Singleton的问题?
|
2003年11月28日 14:16
|
|
|
|
|
|
|
|
|
Re: 请教一个Singleton的问题?
|
2005年03月20日 01:10
|
|
|
其实 Sigleton 不用来作多线程 多线程用Double-checked Locking
|
|
|
|