首页 > 代码库 > Java单例模式
Java单例模式
单例模式确保一个类只有一个实例存在。
在计算机系统中,线程池、缓存、日志对象、对话框、打印机、显卡的驱动程序对象常被设计成单例。
饿汉法
public
class
Singleton {
private
static
Singleton =
new
Singleton();
private
Singleton() {}
public
static
getSignleton(){
return
singleton;
}
}
饿汉式在类创建的同时就已经创建好一个静态的对象供系统使用,以后不再改变,所以天生是线程安全的。但是无法做到延迟创建对象。
懒汉式
public
class
Singleton {
private
static
Singleton singleton =
null
;
private
Singleton(){}
public
static
Singleton getSingleton() {
if
(singleton ==
null
) singleton =
new
Singleton();
return
singleton;
}
}
懒汉式单例类.在第一次调用的时候实例化自己,没有考虑线程安全问题,它是线程不安全的
public
class
Singleton {
private
Singleton(){}
public
static
Singleton getSingleton(){
return
Holder.singleton;
}
private
static
class
Holder {
private
static
Singleton singleton =
new
Singleton();
}
}
通过静态内部类,延时加载,并且能保证线程安全(这样就避免了静态实例在Singleton类加载的时候就创建对象,并且由于静态内部类只会被加载一次,所以这种写法也是线程安全的:)
枚举写法
public enum EnumSingleton{
INSTANCE;
}
通过EnumSingleton test=EnumSingleton.INSTANCE来访问
使用枚举除了线程安全和防止反射强行调用构造器之外,还提供了自动序列化机制,防止反序列化的时候创建新的对象。因此,Effective Java推荐尽可能地使用枚举来实现单例。
Java单例模式
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。