单例模式

5种java中单例创建方式:

1、饿汉式:类加载类初始化时,会立即加载类对象,线程天生安全,调用效率高

2、懒汉式:类初始化时,不会立即加载对象,真正需要使用时才会创建,具有懒加载功能;但是创建时需要上锁以保证线程安全。这样会导致效率不高。

3、静态内部方式:结合了饿汉式、懒加载式的优点,真正需要对象才创建。具有线程安全。

4、枚举单例;枚举本身就是单例;

5、双重检测方式:因为JVM具有重拍机制,可能会创建多个对象,不建议使用。

 

饿汉式:

/**
 * 
 */
package com.zuk.test.menu;

/**
 * @author 
 * 饿汉式
 * 特点:在类初始化的时候就会创建对象,天生线程安全,调用效率比较高,如果在不适用对象的时候,会浪费内存
 * 步骤:1、将构造函数私有化
 */
public class SingleonObject {
	
	private static final SingleonObject singleonObject = new SingleonObject();
	
	private SingleonObject(){}
	
	public static SingleonObject getInstance(){
		return singleonObject;
	}
	
}
/**
 * 
 */
package com.zuk.test.menu;

/**
 * @author 
 *
 */
public class SingleonObjectMain {
	public static void main(String[] args) {
		SingleonObject o1 = SingleonObject.getInstance();
		SingleonObject o2 = SingleonObject.getInstance();
		System.out.println(o1==o2);  //返回时true
	}
}

懒汉式

/**
 * 
 */
package com.zuk.test.menu;

/**
 * @author 
 * 1、在需要使用的时候才创建对象,但是创建时不具备线程安全,需要上锁来保证线程安全。如此会导致使用效率非常低。
 * 步骤:
 * 1、私有化构造函数
 * 2、上锁
 */
public class SingleonObj2 {
	
	private static SingleonObj2 singleonObj2;
	
	private SingleonObj2(){}
	
	public static synchronized SingleonObj2 getInstance(){
		if(singleonObj2!=null){
			singleonObj2 = new SingleonObj2();
		}
		return singleonObj2;
	}
	
}

枚举式

 

 

静态内部类

/**
 * 
 */
package com.zuk.test.menu;

/**
 * @author HUANGLIAO322
 * 枚举式创建单例
 */
public class Singleon {

	private Singleon(){System.out.println("a");}
	
	static class SingleonClass {
		public static Singleon singleon = new Singleon();
	} 
	
	public static Singleon getInstance(){
		return Singleon.SingleonClass.singleon;
	}
	
//	public static void main(String[] args) {
//		Singleon s1 = Singleon.getInstance();
//		Singleon s2 = Singleon.getInstance();
//		System.out.println(s1==s2);
//	}
	
}

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值