java单例模式

本文介绍了单例模式的两种实现方式:饿汉式和懒汉式,并对比了它们的特点及应用场景。饿汉式在线程安全方面表现较好,但在对象未被使用前即已创建;懒汉式则实现了对象的按需创建,但在多线程环境下可能存在线程安全问题。

写法一(饿汉式):
      

 public class Test{              
        private/public static Test test = new Test();              
        private Test(){ }              
        public static Test getInstance(){                     
            return test;          
    }   
}

 

写法二(懒汉式,延迟加载方式)    

public class Test{              
        private/public static Test test = null;             
        private Test(){ }              
        public static Test getInstance(){                    
            if(test == null){                      
                test = new Test();              
             }                    
         return test;          
        }   
}

 

    对于饿汉式,当类被加载的时候,已经创建好了一个静态对象,因此,是线程安全的,但缺点是在这个对象还没被使用的时候就已经被创建出来了。

    对于懒汉式,缺点是非线程安全的。例如当第一个线程执行到判断语句if(test == null)时,第二个线程执行判断语句if(test == null),接着第一个线程执行语句test = new Test(),第二个线程也执行test = new Test(),在这种多线程环境下,可能会创建出两个对象。当然这种写法的优点是按需创建对象,只有对象被使用的时候才会被创建。

单例模式的目的:保证一个类的对象的唯一性

单例模式的应用场景:例如多个程序都要使用一个配置文件中的数据,而且要实现数据的共享和交换。必须要将多个数据封装到一个对象中,而且多个程序操作的是同一个对象。也就是说要保证这个配置文件对象的唯一性

1、如何保证对象的唯一性?

一个类只要提供构造函数,就可以产生多个对象,数量不可控。那么如何才能实现单例模式的功能呢?

解决方法:不让其他程序建立对象,自己在本类中创建对象(数量可控),对外提供访问方式。

1、直接private化构造函数

2、直接在本类中new一个对象。即可采用private方式,也可采用public方式。当采用public时,可以通过 Test test = Test.test来获取对象,也可以通过getInstance方法来获取对象。若是采用private,则只能通过getInstance方法来获取对象。

3、给其他程序提供访问方式(getInstance方法)

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值