单例模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点。
大家经常提到的单例模式:懒汉式和饿汉式。下边都举例说下。
懒汉式:
饿汉式:
测试类:
两种方案对比下: 构造函数和公用方法都是静态的,实例和公用方法又都是私有的。但是饿汉式每次调用都是不需要重新创建的,直接返回已经创建好的实例,这样速度快了,但是占用了空间,因为类实例是static的,会一直存在内存中。懒汉式是通过判断是否存在,再重新实例化,影响速度。而且再并发的情况下,懒汉式有线程安全问题。
懒汉式(加线程控制):
相对普通的懒汉式只是再对外开放的方法里加了synchornized,没有在方法名前直接加是考虑访问速度和减小锁的粒度,再方法里有两个判断null的if语句,也是为防止出现安全问题,还能提高速度,自己可以思考下。