锁定老帖子 主题:面试单例
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2013-08-06
最后修改:2013-08-11
<p>Public. Class. Single{</p> <p>Private. Static. Single single =new. Single();</p> <p>Private. Single(){}</p> <p>Public. Static. Single. Getintance()</p> <p>{ Return. single;</p> <p>}</p> <p>}</p> <p>面试经理说我的错了,</p> <p>ok,错了我就改 Private. Final. Static. Single=new. Single();</p> <p>改为这样,人家还是认为我的有问题,非得还加上 Public. synchronized. Static. Single. Getintance(){ Return. Single; } p></div> 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2013-08-06
自以为是的面试官 我也碰到过类似的
|
|
返回顶楼 | |
发表时间:2013-08-07
为啥我觉得那个面试官做的反而是不对的……synchronized不需要加吧,因为你的new Single()不是在getInstance()里做的……
如果是下面这样,倒是应该加synchronized…… Public. Static. Single. Getintance(){ if(single==null){ single = new Single(); } return single; } 是这样吗? |
|
返回顶楼 | |
发表时间:2013-08-07
楼主写的不对。
你没有定义一个私有的构造函数,所以外边不通过getInstance也能实例化这个类,这是不对的。 像下面这样。 public Class Single{ private Single(){ //这里什么都可以不写 } } |
|
返回顶楼 | |
发表时间:2013-08-07
感觉 楼主是正确的 , 构造函数 是私有的 , 且对象也是 final static ,没有问题
|
|
返回顶楼 | |
发表时间:2013-08-07
不对 final 不能保证对象状态 不被改变 。 也就 不能保证对象的不可变性
|
|
返回顶楼 | |
发表时间:2013-08-09
楼上:
我并没有公开对象属性,也没造成对象属性逃逸,怎么不安全? |
|
返回顶楼 | |
发表时间:2013-08-10
显然楼主是对的。面试经理太水了。
|
|
返回顶楼 | |
发表时间:2013-08-10
谢谢大家回复:我的写法确实不完整。我也是参照java并发编程实践及敏捷软件开发对单例描述编写。现在清楚这两本书没对这种写法例外进行描述。
|
|
返回顶楼 | |
发表时间:2013-08-11
用枚举实现single,完全没有并发问题,记得好像是Effective Java推荐的
public enum Single { INSTANCE; ... ... ... } |
|
返回顶楼 | |