一、懶漢模式
具體如下:
/* 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/