单例模式:
一个类模板,在整个系统运行过程中,只允许产生一个实例(有且只有一个对象)new
例如:工厂模式中的配置文件,日历…。
实现单例模式的技术方案:
饿汉式、懒汉式、注册登记式、枚举式、序列化与反序列化方式
饿汉式:
在使用实例之前,不管你用不用,我都先new出来,避免了线程安全问题。
代码演示
懒汉式:
在使用实例之前不创建,当你使用时才创建,线程不安全。
代码演示
懒汉一:
懒汉二:
懒汉三:
注册登记式:
每使用一次,都往一个固定的容器中去注册并且将使用过的对象进行缓存,下次去取对象的时候,就直接从缓存中取值,已保证每次获取的都是同一个对象。分为容器式和枚举式
代码演示
容器式:
枚举式:
序列化与反序列化保证单例:
重写序列readResolve()方法。
该方法在系统运行中,由JVM自动调用。
代码演示
单例模式主要的问题:
单例模式在并发的情况下,线程会出现安全问题、生成几个不同的对象,序列化与反序列化的时候会出现多例。