一、懒汉模式
具体如下:
/* Create a Singleton class */
class Singleton {
public static Singleton getInstance(){
return instance;
}
private static final Singleton instance = new Singleton();
private Singleton(){
System.out.println("Singleton()");
}
}
public class Lazy{
public static void main(String args[]){
Singleton s1 = Singleton.getInstance();
Singleton s2 = Singleton.getInstance();
Singleton s3 = Singleton.getInstance();
}
}
二、饿汉模式
方法1、使用同步方法,线程安全,效率低
/**
* getInstance() with synchronized
*/
class Singleton {
public static synchronized Singleton getInstance(){
if(null == instance)
{
instance = new Singleton();
}
return instance;
}
private static Singleton instance = null;
private Singleton(){
System.out.println("Singleton()");
}
}
public class Hungry {
public static void main(String args[]){
Singleton s1 = Singleton.getInstance();
Singleton s2 = Singleton.getInstance();
Singleton s3 = Singleton.getInstance();
}
}
方法2、使用同步代码块,线程安全,效率高
/**
* getInstance() inner content with synchronized
*/
class Singleton {
public static Singleton getInstance(){
if (null == instance){
synchronized(Singleton.class){
if (null == instance){
instance = new Singleton();
}
}
}
return instance;
}
private static Singleton instance = null;
private Singleton(){
System.out.println("Singleton()");
}
}
public class Hungry2 {
public static void main(String args[]){
Singleton s1 = Singleton.getInstance();
Singleton s2 = Singleton.getInstance();
Singleton s3 = Singleton.getInstance();
}
}
方法3、静态内部类,没有性能损耗
/**
* inner static class with synchronized
*/
class Singleton {
public static final Singleton getInstance(){
return SingletonHolder.instance;
}
private Singleton(){
System.out.println("Singleton()");
}
private static class SingletonHolder {
private static final Singleton instance = new Singleton();
}
}
public class Hungry3 {
public static void main(String args[]){
Singleton s1 = Singleton.getInstance();
Singleton s2 = Singleton.getInstance();
Singleton s3 = Singleton.getInstance();
}
}
请参考该文章,有详细讲解,
http://blog.csdn.net/jason0539/article/details/23297037/