java单例设计模式,
分享于 点击 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.双重判断
相关文章
- 暂无相关文章
用户点评