单例模式 java使用_Java 单例模式的使用

1.单例模式的定义

确保某一个类中只有一个实例,而且自行实例化并且向整个系统提供一个实例。

singleton包下的Singleton是懒汉式单例,Singleton双检查单例,Singleton2饿汉式单例

2.单例模式的使用场景:

确保某个类有且只有一个实例。避免产生多个对象消耗过多的资源,或者某种类型的对象只应该有且既有一个。

例如创建一个对象需要消耗资源过多,如要访问IO和数据库资源、网络资源,这事就要考虑使用单例

3单例模式的关键点:

(1)构造方法私有化,一般为private

(2).通过一个静态方法返回单例对象。

(3)确保单例类对象只有一个,尤其是在多线程的情况下。

(4)确保单例类对象在反序列化时,不重新构建对象。

4.代码实现

4.1懒汉式单例

package singleton;

/**

* 懒汉式单列模式

* @author Administrator

* @优点:单例只有在使用的时候才会初始化化,在一定程度上节约了资源。

* @缺点:第一次加载时需要及时的进行初始化,反应稍微慢,最大的问题是每次调用getInstance

* 都是同步,造成了不必要的开销,一般不建议使用。

*/

public class Singleton {

private static Singleton instance;

private Singleton(){}

//同步方法

public static synchronized Singleton getInstance(){

if(instance==null){

instance = new Singleton();

}

return instance;

}

public static void main(String[] args) {

System.out.println();

}

}

4.2双检查单例(DCL)模式

package singleton;

/**

*

* @author lidong

* @优点:既能够在需要的时候初始化单例,又能够保证线程安全。 并且单例对象初始化后调用getInstance不进行同步锁。

* @延迟加载方式

*/

public class Singleton1 {

private static Singleton1 instance = null;

private Singleton1() {

}

public static Singleton1 getInstance() {

if (instance == null) {//避免不必要的同步

synchronized (Singleton1.class) {

if (instance == null) {//为null的时候创建实例

instance = new Singleton1();

}

}

}

return instance;

}

}

3.饿汉式单例

package singleton;

/**

* 饿汉式单例

* @author lidong

* @预先加载方式

*/

public class Singleton2 {

private static Singleton2 instance = new Singleton2();

private Singleton2() {

}

public static Singleton2 getInstance(){

return instance;

}

}

测试类

package singleton;

public class Test {

public static void main(String[] args) {

//饿汉式

Singleton2 s1 = Singleton2.getInstance();

Singleton2 s2 = Singleton2.getInstance();

System.out.println(s1.equals(s2));

//懒汉式

Singleton s3 = Singleton.getInstance();

Singleton s4 = Singleton.getInstance();

System.out.println(s3.equals(s4));

//双枷锁模式

Singleton1 s5 = Singleton1.getInstance();

Singleton1 s6 = Singleton1.getInstance();

System.out.println(s5.equals(s6));

System.out.println(s1);

System.out.println(s2);

System.out.println(s3);

System.out.println(s4);

System.out.println(s5);

System.out.println(s6);

}

}

结果:

true

true

true

singleton.Singleton2@12b6651

singleton.Singleton2@12b6651

singleton.Singleton@4a5ab2

singleton.Singleton@4a5ab2

singleton.Singleton1@1888759

singleton.Singleton1@1888759

下载地址

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值