单件模式(单例模式)单件模式,⼜称单例模式
/**
* 单例,版本⼀,此版本多线程下有问题。不要使⽤
*/
public class Singleton00 {
private Singleton00() { }
private static Singleton00 uniqueInstance;
public static Singleton00 getInstance() {
if(null == uniqueInstance) {
uniqueInstance = new Singleton00();
}
return uniqueInstance;
}
}
/**
* 单例,版本2,加锁,同步这个⽅法,效率低
*/
public class Singleton01 {
private Singleton01() { }
private static Singleton01 uniqueInstance;
public static synchronized Singleton01 getInstance() {
if(null == uniqueInstance) {
uniqueInstance = new Singleton01();
}
return uniqueInstance;
}
}
/**
* 单例,版本3,急切版,饿汉版,多线程下没有问题。
* JVM在加载这个类时,马上就创建 uniqueInstance,保证了线程安全。thread safe。
*/
public class Singleton02 {
private Singleton02() { }
private static Singleton02 uniqueInstance = new Singleton02();
public static Singleton02 getInstance() {
return uniqueInstance;
}
}
/**
* 单例,版本4,双重检查加锁,double-checked locking。版本2的改进,效率⾼。
*/
public class Singleton03 {
private Singleton03() { }
//volatile 关键字确保:当uniqueInstance变量被初始化成实例时,多线程的uniqueInstance同时改变。
java单例模式懒汉和饿汉
private volatile static Singleton03 uniqueInstance;
public static Singleton03 getInstance() {
if(null == uniqueInstance) {
synchronized(Singleton03.class) {
if(null == uniqueInstance) {
uniqueInstance = new Singleton03();
}
}
}
return uniqueInstance;
}
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论