java单例模式的作用_Java 5种单例模式

/*单例模式:

指某个类中只能存在一个对象实例,并且该类中只提供一个取得其对象实例的方法

优点:减少系统性能开销

应用场景:网站的计数器,任务管理器,回收站等

*/

//单例模式1 -- 静态内部类

//优点:线程安全,调用效率高,同时实现了延时加载

public class Singleton1 {

//私有化构造器

private Singleton1(){

}

//私有化静态内部类,并创建一个静态内部类变量

private static class SingletonClassInstance{

private static final Singleton1 instance = new Singleton1();

}

//定义公共的静态的方法,返回当前类的对象

public static Singleton1 getInstance(){

return SingletonClassInstance.instance;

}

}

//单例模式2--懒汉式

//好处-- 延时加载,节省内存空间

//坏处 -- 线程不安全

class Singleton2 {

//私有化构造器

private Singleton2(){

}

//私有化对象

private static Singleton2 instance;

//获取对象

public static Singleton2 getInstance(){

if(instance == null){

instance = new Singleton2();

}

return instance;

}

}

//单例模式3 -- 饿汉式

//优点 -- 线程安全

//缺点 -- 没有延时加载,类加载之后会占用内存空间

class Singleton3{

//私有化构造器

private Singleton3(){

}

//私有化一个不可变对象

private static final Singleton3 instance = new Singleton3();

//获取对象

public static Singleton3 getInstance(){

return instance;

}

}

//单例模式4 -- 枚举

//优点 -- 类初始化时就加载这个对象,线程安全.方法没有同步,调用效率高。避免了反射和反序列化的漏洞

//缺点 -- 没有延时加载

enum Singleton4{

//定义一个枚举对象

INSTANCE;

//定义需要的方法

public void singletonOperation(){

}

}

//单例模式5 -- 双重检查锁式

//优点 -- 将同步内容下放到if内部,提高了执行效率,不必每次获取对象时都进行同步,只有第一次才同步,创建了以后就没必要了

//缺点 -- 由于编译器优化原因和JVM底层内部模型的原因,偶尔会出问题,不建议使用

class Singleton5{

private Singleton5(){

}

private static Singleton5 instance = null;

public static Singleton5 getInstance(){

if(instance == null){

Singleton5 sc;

synchronized ( Singleton5.class){

sc = instance;

if(sc == null){

synchronized(Singleton5.class){

if(sc == null){

sc = new Singleton5();

}

}

instance = sc;

}

}

}

return instance;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值