java实现单列模式的七种方式
来源:互联网 发布:理财小知识 知乎 编辑:程序博客网 时间:2024/06/05 09:53
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()); } }
运行结果:
0 0
- java实现单列模式的七种方式
- 单列模式的多种实现方式
- Java的几种单列模式
- 实现python的单列模式
- 单列设计模式的实现
- Java单例模式七种实现方式
- ActionScript3单列模式的一种实现
- 基于c++的单列模式实现。
- 单例模式的七种实现方式
- Java中两种单列模式的书写
- 单列模式实现
- Java单列模式
- 浅谈java单列模式
- java单列模式
- Java单列模式学习
- java 单列模式
- java单列设计模式
- Java单列设计模式
- 垂直滑动VerticalViewPager
- CentOS 6.4下Squid代理服务器的安装与配置
- 项目发布操作不当引起的问题
- test9
- test10
- java实现单列模式的七种方式
- node.js学习日记(4)
- test11
- Jekyll x Liquid 控制文章列表只显示特定类别的Post
- 使用maven管理项目的一些问题处理记录
- 网络攻防
- Jsp&Servlet 用户登录功能实现
- Tomcat6配置参数详解
- Linux-MATLAB安装failed to creat folder(/usr/local)