单例模式有两种体现形式:
1,饿汉式。
/*
class Single
{
private static final Single s = new Single();
private Single(){}
public static Single getInstance()
{
return s;
}
}
*/
//2,懒汉式。(延迟加载)
class Single
{
private static Single s = null;
private Single(){}
public static Single getInstance()
{
if(s==null)
{
s = new Single();
}
return s;
}
}
/*
当多个线程并发执行getInstance方法时,容易发生线程安全问题。
因为s是共享数据,有多条语句在操作共享数据。
解决方式很简单。只要让getInstance方法具备同步性即可.
这虽然解决了线程安全问题,但是多个线程每一次获取该实例,都要
调用这个方法,每次调用都判断一次锁,所以效率会比较低.
为了保证安全,同时为了提高效率.可以通过双重判断的形式来完成。
原理:就是减少线程判断的锁次数。
虽然解决安全问题,也解决了效率问题,但是代码过多。
所以建议使用饿汉式体现单例设计模式。
但是面试时,考的都是懒汉式。
*/
class Single
{
private static Single s = null;
private Single(){}
public static Single getInstance()
{
if(s==null)
{
synchronized(Single.class)
{
if(s==null)
{
s = new Single();
}
}
}
return s;
}
}