码迷,mamicode.com
首页 > 其他好文 > 详细

使用静态内部类实现单例设计模式

时间:2017-08-08 12:39:41      阅读:132      评论:0      收藏:0      [点我收藏+]

标签:users   href   使用   class   line   test   一个   pretty   微软雅黑   

            前几天看了下公司代码中的一个单例类,发现居然是用静态内部类实现的。后面在网上找了下资料,发现使用静态内部实现的单例是懒加载的且线程安全。
            从网上资料得出如下结论:加载一个类时,其内部类不会同时被加载。一个类被加载,当且仅当其某个静态成员(静态域、构造器、静态方法等)被调用时发生。

一、代码

  1. package com.zxy.test;
  2. /**
  3. * 使用静态内部类实现的单例类
  4. * @author ZENG.XIAO.YAN
  5. * @date 2017-08-08 10:29:20
  6. * @version V1.0
  7. */
  8. public class UserSingleton {
  9. /** 私有化构造器 */
  10. private UserSingleton() {
  11. }
  12. /** 对外提供公共的访问方法 */
  13. public static UserSingleton getInstance() {
  14. return UserSingletonHolder.INSTANCE;
  15. }
  16. /** 写一个静态内部类,里面实例化外部类 */
  17. private static class UserSingletonHolder {
  18. private static final UserSingleton INSTANCE = new UserSingleton();
  19. }
  20. }

二、小结

        (1)为什么这样实现就是单例的?
                 因为这个类的实例化是靠静态内部类的静态常量实例化的。
                 INSTANCE 是常量,因此只能赋值一次;它还是静态的,因此随着内部类一起加载。
        (2)这样实现有什么好处?
                  我记得以前接触的懒汉式的代码好像有线程安全问题,需要加同步锁才能解决。
                  采用静态内部类实现的代码也是懒加载的,只有第一次使用这个单例的实例的时候才加载;
                   同时不会有线程安全问题
        (3)参考文档
                    http://yongliang567.iteye.com/blog/904467

使用静态内部类实现单例设计模式

标签:users   href   使用   class   line   test   一个   pretty   微软雅黑   

原文地址:http://www.cnblogs.com/zxy0216/p/7305854.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!