java单例设计模式

java单例设计模式

单例就是该类只能返回一个实例。
单例所具备的特点:
1.私有化的构造函数
2.私有的静态的全局变量
3.公有的静态的方法
单例分为懒汉式、饿汉式和双层锁式

饿汉式:
public class Singleton {
	//构造方法私有
	private Singleton() {
		System.out.println("-----------------------");
	}
	private static Singleton singleton = new Singleton();
	
	//静态实例工厂
	public static Singleton getInstance() {
		return singleton;
	}
	
}
懒汉式:
public class Singleton2 {

	private Singleton2() {
		System.out.println("--------------");
	}
	
	public static Singleton2 singleton2 = null;
	
	//静态实例工厂、
	public static Singleton2 getInstance() {
		if(singleton2 == null) {
			singleton2 = new Singleton2();
		}
		return singleton2;
	}
	
}
代码安全锁
public class Singleton3 {

	private Singleton3() {
		System.out.println("--------------");
	}
	
	public static Singleton3 singleton3 = null;
	
	//静态实例工厂、
	public synchronized static Singleton3 getInstance() {
		if(singleton3 == null) {
			singleton3 = new Singleton3();
		}
		return singleton3;
	}
	
}
  synchronized添加在方法上,会把整个方法都锁住,锁的代码太多,锁的力度太大。

双重判定锁
public class Singleton4 {

private Singleton4() {
	System.out.println("------------");
}

private static Singleton4 singleton4 = null;

public static Singleton4 getInstance() {
	if(singleton4 == null) {
		synchronized (Singleton.class) {
			if(singleton4 ==null) {
				singleton4 = new Singleton4();
			}
		}
	}
	return singleton4;
	}
}

只锁几行代码,提升性能。


通过双重判断来保证单列设计模式在多线程中的安全性,
并且它在性能方面提高了很多。


 synchronized在方法上加锁 (同步锁)

synchronized在代码块内部加锁 (同步代码块)

synchronized(同步锁)

使用synchronized如何解决线程安全的问题?
1.synchronized在方法上加锁
2.synchronized在代码块内部加锁

1.懒汉  2.饿汉	 3.双重判断
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值