/*
单例设计模式。
*/
//饿汉式。
/*
class Single
{
private static final Single s = new Single();
private Single(){}
public static Single getInstance()
{
return s;
}
}
*/
//懒汉式
class Single
{
private static Single s = null;
private Single(){}
public static Single getInstance()
{
if(s==null)
{
synchronized(Single.class)//静态方法的锁是(类名.class),因为静态方法不支持this,super,而且是属于类级别的
{
if(s==null)
//--->A;
s = new Single();
}
}
return s;
}
}
class SingleDemo
{
public static void main(String[] args)
{
System.out.println("Hello World!");
}
}
使用双重if 判断(double check) 来解决多线程的效率问题,如果有
3个以上 的线程,最多前面两个判断锁,那么从第三个线程开始,
都不再需要判断锁。
面试时问:懒汉式和饿汉式有什么不同?
答:懒汉式的特点在于实例的延迟加载。
紧跟着问:懒汉式的延迟加载有没有问题?
答:有,如果多线程访问时会出现安全问题
又问怎么解决?
可以加同步来解决,用同步函数和同步代码块都行,但是稍微有些低效,用双重判断的方式能解决懒汉式的效率的问题。
紧跟着又问:加同步的时候使用的锁是哪一个?
该类所属的字节码文件对象,即类名.class