zoukankan      html  css  js  c++  java
  • Java 单例

    最近在网上看到一篇关于 Java 单例的创建问题,虽然是一个 Java 程序员,但是到现在还没有真正的深入了解到 Java 的原理和机制。所以每每看到这样能够“真正”接触 Java 的机会内心总是充满了欣喜。记录下,以后备用。

    懒汉模式

    public class Singlton{
        private static Singleton instance;
        private Singlton(){}
        public static Singlton getInstance(){
            if(instacne == null)
                instance = new Singlton();
            return instance;
        }
    }
    

    教科书式的写法,但是无法适用于多线程的状态下。

    饿汉模式

    public class Singleton{
        private static Singletion instance = new Singleton();
        private Singleton(){}
        public static Singleton getInstance(){
            return instance;
        }
    }
    

    饿汉模式可以有效的避免多线程的同步问题,不过使用 static 会多多少少牺牲点性能。

    静态内部类

    public class Singleton{
        private static class SingltonHolder{
            private static final Singleton INSTANCE = new Singlton();
        }
        private Singleton(){}
        public static final Singleton getInstance(){
            return SingletonHolder.INSTANCE;
        }
    }
    

    使用静态内部类的方式,利用 ClassLoder 的机制保证了初始化的时候只有一个线程,并且兼顾了性能——Singleton 类被装载的时候,getInstance 并不会立马初始化,只有调用的时候才会被初始化。

    枚举

    public enum Singleton{
        INSTANCE;
        public void method(){
        //do something
        }
    }
    

    这种方式 Effective Java 中推荐的方式,很厉害的一种写法。唯一的缺点就是无法继承了吧。

    小结

    虽然只是创造一个单例,但是其中需要考虑的东西真的有很多。不得不感叹那些编程高手,能够将心思缜密,利用语言的各种特性去编程创造。对于创建单例模式还是比较推荐使用静态内部类的方式创建,不失性能的同时又兼顾安全。但是其实我更加喜欢枚举的方式。

    本文由个人 hexo 博客 co2fe.com 迁移
    date: 2017-04-13 22:27:15

  • 相关阅读:
    ubuntu VirtualBox 网络配置
    Linux Lsof命令详解
    自然用户界面
    [Java]读取文件方法大全
    java设计模式_命令模式 两个不同风格的实现
    创建线程的方法 Thread Runnable
    程序员每天到底可以写几行代码?
    eclipse Javadoc 汉化成中文
    linux jna调用so动态库
    使用GNU Make来管理Java项目,IDE神马都是浮云
  • 原文地址:https://www.cnblogs.com/manastudent/p/10190827.html
Copyright © 2011-2022 走看看