欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

java单例设计模式,

来源: javaer 分享于  点击 13626 次 点评:60

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.双重判断

相关文章

    暂无相关文章
相关栏目:

用户点评