延迟加载吗? 否 延迟加载吗? 是 延迟加载吗? 是 JDK 版本:JDK1.5 起
单例模式
源码刨析(RunTime.java)
package java.lang; public class Runtime { //1、创建静态的全局唯一的对象 private static Runtime currentRuntime = new Runtime(); //2、私有化构造方法,不让外部来调用 private Runtime() {} //3、通过自定义的静态方法获取实例 public static Runtime getRuntime() { return currentRuntime; } }
单例模式的几种实现方式
1. 饿汉式
多线程安全吗? 安全
实现难度? 简单
描述: 这种方式比较常用,但容易产生垃圾对象。
优点:没有加锁,执行效率会提高。
缺点:类加载时就初始化,浪费内存。public class Singleton { private static Singleton instance = new Singleton(); private Singleton (){} public static Singleton getInstance() { return instance; } }
2. 懒汉式, 线程不安全
多线程安全吗? 不安全
实现难度? 简单
描述: 这种方式是最基本的实现方式,这种实现最大的问题就是不支持多线程。因为没有加锁 synchronized,所以严格意义上它并不算单例模式。public class Singleton { private static Singleton instance; private Singleton (){} public static Singleton getInstance() { if (instance == null) { instance = new Singleton(); } return instance; } }
3. 懒汉式, 线程安全
多线程安全吗? 安全
实现难度? 简单
描述: 这种方式具备很好的 lazy loading,能够在多线程中很好的工作,但是,效率很低,99% 情况下不需要同步。
优点:第一次调用才初始化,避免内存浪费。
缺点:必须加锁 synchronized 才能保证单例,但加锁会影响效率。public class Singleton { private static Singleton instance; private Singleton (){} // 必须加同步锁 public static synchronized Singleton getInstance() { if (instance == null) { instance = new Singleton(); } return instance; } }
4、双检锁/双重校验锁(DCL,即 double-checked locking)
延迟加载吗? 是
多线程安全吗? 安全
实现难度? 有点难
描述: 这种方式采用双锁机制,安全且在多线程情况下能保持高性能。public class Singleton { private volatile static Singleton singleton; private Singleton (){} public static Singleton getSingleton() { if (singleton == null) { synchronized (Singleton.class) { if (singleton == null) { singleton = new Singleton(); } } } return singleton; } }
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算