论坛首页 Java企业应用论坛

面试单例

浏览 15542 次
锁定老帖子 主题:面试单例
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2013-08-06   最后修改:2013-08-11
<div class="iteye-blog-content-contain" style="font-size: 14px"><p>今天有人面试我单例: 我写如下</p>
<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>
   发表时间:2013-08-06  
自以为是的面试官 我也碰到过类似的
0 请登录后投票
   发表时间:2013-08-07  
为啥我觉得那个面试官做的反而是不对的……synchronized不需要加吧,因为你的new Single()不是在getInstance()里做的……

如果是下面这样,倒是应该加synchronized……
Public. Static. Single. Getintance(){
if(single==null){
  single = new Single();
}
return single;
}

是这样吗?
0 请登录后投票
   发表时间:2013-08-07  
楼主写的不对。
你没有定义一个私有的构造函数,所以外边不通过getInstance也能实例化这个类,这是不对的。
像下面这样。
public Class Single{
private Single(){
//这里什么都可以不写
  }
}
0 请登录后投票
   发表时间:2013-08-07  
感觉 楼主是正确的 , 构造函数 是私有的 , 且对象也是 final static ,没有问题
0 请登录后投票
   发表时间:2013-08-07  
不对 final 不能保证对象状态 不被改变 。 也就 不能保证对象的不可变性
0 请登录后投票
   发表时间:2013-08-09  
楼上:
我并没有公开对象属性,也没造成对象属性逃逸,怎么不安全?
0 请登录后投票
   发表时间:2013-08-10  
显然楼主是对的。面试经理太水了。
0 请登录后投票
   发表时间:2013-08-10  
谢谢大家回复:我的写法确实不完整。我也是参照java并发编程实践及敏捷软件开发对单例描述编写。现在清楚这两本书没对这种写法例外进行描述。
0 请登录后投票
   发表时间:2013-08-11  
用枚举实现single,完全没有并发问题,记得好像是Effective Java推荐的

public enum Single
{
INSTANCE;

...
...
...
}
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics