黑马程序员技术交流社区
标题:
关于懒汉式单例设计的问题
[打印本页]
作者:
Tking
时间:
2014-4-21 12:14
标题:
关于懒汉式单例设计的问题
本帖最后由 Tking 于 2014-4-21 19:06 编辑
class Single//单例懒汉式
{
private static Single single=null;
private Single(){}
public static Single getSingle()
{
if(single==null)//双重判断提高效率,和安全性
synchronized (Single.class) {
if(single==null)
single=new Single();
}
return single;
}
}
复制代码
由于线程问题,所以需要加锁和双重判断,提高效率,与安全性
但是我记得有句话“当函数内只有一句话的时候,不存在安全问题”
class Singlegai//懒汉式修改版
{
private static Singlegai single=null;
private Singlegai(){}
public static Singlegai getSinglegai()
{
//这个自创的,视频上说只有一句话要运行时,就可以不考虑安全问题。
return single!=null?single:(single=new Singlegai());
}
}
复制代码
这样呢,这样的单例会有安全隐患没?
求:如果有,求详细解释。
作者:
osully
时间:
2014-4-21 12:31
虽然我没听过这个句话
但是经过实验证明...还是出现了安全问题...
测试代码如下
class Singlegai//懒汉式修改版
{
private static Singlegai single=null;
private Singlegai(){}
public static Singlegai getSinglegai()
{
//这个自创的,视频上说只有一句话要运行时,就可以不考虑安全问题。
return single!=null?single:(single=new Singlegai());
}
}
public class Test{
public static void main(String[] args) {
for (int i = 0; i < 2; i++) {
new Thread(new Runnable(){
public void run(){
System.out.println(Thread.currentThread().getName()+Singlegai.getSinglegai());
}
}).start();
}
}
}
复制代码
作者:
Up↑Lee↗
时间:
2014-4-21 12:49
一句话,但是并不是复合型的程序语句。。。这样仍然不妥
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2