单例模式变体

/*
*饿汉模式
*/

public class EagerSingleton {

  private static EagerSingleton eagerSingleton=new
EagerSingleton();
  private EagerSingleton()
{
    super();
  }
  public static EagerSingleton
getInstance(){
    return eagerSingleton;
  }
}

/*
*懒汉模式

*优点: 不使用就不创建, 节省内存空间。 
* 缺点: synchronized 对方法的影响是永久性的。 多线程环境下,
getInstance性能很低。
* /

public class LazySingleton {

  private static LazySingleton lazySingleton=null;

  private
LazySingleton() {
  super();
  }

  public static synchronized
LazySingleton
getInstance(){
    if(lazySingleton==null){
    lazySingleton=new
LazySingleton();
    }
    return lazySingleton;
  }

}

/*
* 优点: 1. lazy
* 2. 当创建对象时, 如果多线程进入 , 没关系。 静态属性的初始化过程 天生具备
线程安全!!
*/

public class StaticSingeton {

  private StaticSingeton() {
    super();
  }
  private static
class Temp {
    public static StaticSingeton ss = new
StaticSingeton();
  }
  public static StaticSingeton
getInstance(){
    return Temp.ss;
  }
}

单例模式变体,布布扣,bubuko.com

时间: 2024-10-28 11:27:54

单例模式变体的相关文章

从头认识java-18.2 基本的线程机制(6)-使用构造器或者内部类来实现多线程的编码变体

这一章节我们来讨论一下使用构造器或者内部类来实现多线程的编码变体. 1.基础实现 package com.ray.ch17; public class Test { public static void main(String[] args) { Thread thread1 = new ExtendsThread(); thread1.start(); Thread thread2 = new Thread(new ImplRunnable()); thread2.start(); } } c

变体(协变与逆变)

变体的引入是为了提高泛型类型的变量在赋值时可以对类型进行兼容性转换,以扩展泛型的灵活性.下面看个例子: public delegate void DoWork<T>(T arg); ........ DoWork<A> del1=delegate(A arg){//.......}; DoWork<B> del2=del1; B bb=new B(); del2(bb); 其中A ,B是两个类,B类继承A类,即:public class A{.....}        

labview 变体

变体数据类型是LabVIEW中多种数据类型的容器.将其它数据转换为变体时,变体将存储数据和数据的原始类型,保证日后可将变体数据反向转换. 例如,如将字符串数据转换为变体,变体将存储字符串的文本,以及说明该数据是从字符串(而不是路径.字节数组或其它LabVIEW数据类型)转换而来的信息. 变体函数可用于创建和操作变体数据.可将平化数据和LabVIEW数据转化为变体数据,或将变体数据转化为LabVIEW数据. 变体数据类型可存储数据的属性.属性是定义的数据及变体数据类型所存储的数据的信息. 例如,如

Android Studio下项目构建的Gradle配置及打包应用变体

Gradle简介 ??Gradle是一个自动化构建工具,采用Groovy的Domain Specific Language(领域特定语言)来描述和控制构建逻辑.具有语法简洁.可读性强.配置灵活等特点.基于Intellij IDEA社区版本开发的Android Studio天生支持Gradle构建程序.Groovy是一种基于JVM的敏捷开发语言,结合了Phthon.Ruby和Smalltalk的许多强大特性.同时,Groovy代码既能够与java代码很好地结合,也能够用于扩展现有的代码. Grad

(转) 干货 | 图解LSTM神经网络架构及其11种变体(附论文)

干货 | 图解LSTM神经网络架构及其11种变体(附论文) 2016-10-02 机器之心 选自FastML 作者:Zygmunt Z. 机器之心编译  参与:老红.李亚洲 就像雨季后非洲大草原许多野生溪流分化成的湖泊和水洼,深度学习已经分化成了各种不同的专门架构. 并且,每个架构都会有一个图解,这里将详细介绍它们. 神经网络在概念上很简单,并且它们十分动人.在层级上,有着一堆同质化的元素和统一的单位,并且它们之间还存在在一系列的加权连接.这就是神经网络的所有,至少从理论上来说是这样.然而,时间

5.2 vector: 创建和使用vector的各种变体

Clojure练习-5.组合数据类型 "用100个函数来操作一个数据结构比10个函数操作10个数据结构要好很多.基于一个统一的数据结构,我们可以构建出一系列的小函数,这些小函数又可以组合起来形成一个强大的系统.而为不同的数据结构编写不同的函数,在根本上就削减了复用的可能." -- [ Alan Perlis ] Clojure练习-5组合数据类型 组合数据类型 2 vector 创建和使用vector的各种变体 已知 解1 测试 解2 测试 5. 组合数据类型 5.2 vector:

[转]Delphi 变体类型(Variant)的介绍(流与变体类型的相互转换、变体类型常用的函数)

Delphi 变体类型(Variant)的介绍(流与变体类型的相互转换.变体类型常用的函数) 一.变体类型常用的函数介绍: Variant: 一种可以拥有各种数据类型: 也可以告诉目前存储的数据是什么类型(通过使用VarType函数): 可以给相同的Variant分配不同的数据类型,只要Variant包含数字值就可以执行算法: variant数组只不过是variant型的数组,不必包含同类型的数据: 1.  VarArrayOf函数:更快捷的创建一维变体数组,可以创建全异的数值数组: funct

Bootstrap 标签的变体 实例样式

Bootstrap 标签样式,代码如下: <!DOCTYPE html> <html> <head> <title>Bootstrap 实例 - 标签的变体</title> <style type="text/css"> .label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:bold;line-height:1;color:#f

【转载】Gradle for Android 第四篇( 构建变体 )

当你在开发一个app,通常你会有几个版本.大多数情况是你需要一个开发版本,用来测试app和弄清它的质量,然后还需要一个生产版本.这些版本通常有不同的设置,例如不同的URL地址.更可能的是你可能需要一个免费版和收费版本.基于上述情况,你需要处理不同的版本:开发免费版,开发付费版本,生产免费版,生产付费版,而针对不同的版本不同的配置,这极大增加的管理难度. Gradle有一些方便的方法来管理这些问题.我们很早之前谈过debug和release版本,现在我们谈到另外一个概念,不同的产品版本.构建版本和