【剑指Offer学习】【面试题2 : 实现Singleton 模式

题目:设计一个类,我们只能生成该类的一个实例

public class Test02 {/*** 单例模式,,懒汉式,线程安全*/public static class Singleton {private final static Singleton INSTANCE = new Singleton();private Singleton() {}public static Singleton getInstance() {return INSTANCE;}}/*** 单例模式,饿汉式,线程不安全*/public static class Singleton2 {private static Singleton2 instance = null;private Singleton2() {}public static Singleton2 getInstance() {if (instance == null) {instance = new Singleton2();}return instance;}}/*** 单例模式,饿汉式,线程安全,多线程环境下效率不高*/public static class Singleton3 {private static Singleton3 instance = null;private Singleton3() {}public static synchronized Singleton3 getInstance() {if (instance == null) {instance = new Singleton3();}return instance;}}/*** 单例模式,懒汉式,变种,线程安全*/public static class Singleton4 {private static Singleton4 instance = null;static {instance = new Singleton4();}private Singleton4() {}public static Singleton4 getInstance() {return instance;}}/*** 单例模式,使用静态内部类,线程安全【推荐】*/public static class Singleton5 {private final static class SingletonHolder {private static final Singleton5 INSTANCE = new Singleton5();}private Singleton5() {}public static Singleton5 getInstance() {return SingletonHolder.INSTANCE;}}/*** 静态内部类,使用枚举方式,线程安全【推荐】*/public enum Singleton6 {INSTANCE;public void whateverMethod() {}}/*** 静态内部类,使用双重校验锁,线程安全【推荐】*/public static class Singleton7 {private volatile static Singleton7 instance = null;private Singleton7() {}public static Singleton7 getInstance() {if (instance == null) {synchronized (Singleton7.class) {if (instance == null) {instance = new Singleton7();}}}return instance;}}public static void main(String[] args) {System.out.println(Singleton.getInstance() == Singleton.getInstance());System.out.println(Singleton2.getInstance() == Singleton2.getInstance());System.out.println(Singleton3.getInstance() == Singleton3.getInstance());System.out.println(Singleton4.getInstance() == Singleton4.getInstance());System.out.println(Singleton5.getInstance() == Singleton5.getInstance());System.out.println(Singleton6.INSTANCE == Singleton6.INSTANCE);System.out.println(Singleton7.getInstance() == Singleton7.getInstance());}}运行结果:

突然之间失去了语言。那才是真正的寂寞,

【剑指Offer学习】【面试题2 : 实现Singleton 模式

相关文章:

你感兴趣的文章:

标签云: