一、饿汉式

不管需不需要这个对象,在类初始化时,这个对象都会被创建出来
不存在线程安全问题
1.直接实例化:

/*** 1.饿汉式直接实例化* @author kun*/public class Singleton1 {public static final Singleton1 INSTANCE = new Singleton1();private Singleton1(){}
}

2.枚举:表示该类型的对象是有限的几个,限定为一个就成了单例

/*** @author kun*/
public enum  Singleton2 {INSTANCE
}

3.静态代码块

/*** 静态代码块* 常用的情况:要从配置文件里读取信息* @author kun*/
public class Singleton3 {public static final Singleton3 INSTANCE ;static {INSTANCE = new Singleton3();}private Singleton3(){}
}

二、懒汉式

1.适用于单线程的(线程不安全)

/*** 懒汉式:延迟创建这个实例对象* 构造器私有化* 用一个静态变量保存这个唯一实例*    提供一个静态方法来获取这个实例对象* @author kun*/
public class Singleton4 {private static Singleton4 instance;private Singleton4(){}public static Singleton4 getInstance(){if (instance == null)instance = new Singleton4();return instance;}
}

2.适用于多线程的(线程安全)

/*** @author kun*/public class Singleton5 {private static Singleton5 instance;private Singleton5(){}public static Singleton5 getInstance(){//为了效率问题 先判断一下instance是否为空if (instance == null){synchronized (Singleton5.class){if (instance == null){instance = new Singleton5();}}}return instance;}
}

3.线程安全 静态内部类法

/*** 在内部类被初始化时 才创建实例* 静态内部类不会自动随着外部类的加载和初始化而初始化 他是单独去初始化的* @author kun*/
public class Singleton6 {private Singleton6(){}private static class Inner{private static final Singleton6 instance = new Singleton6();}public static Singleton6 getInstance(){return Inner.instance;}
}

饿汉式 枚举方式最简单
懒汉式 静态内部类方式最简单

单例模式几种实现方式和代码相关推荐

  1. 设计模式之单例模式8种实现方式,其五:懒汉式(线程不安全,同步代码块)

    实现方式: 1.构造方法私有化 2.创建类的静态变量,不实例化 3.向外部暴露一个静态的公共方法,并判断是否存在实例,如果不存在,则实例化 4.在公共方法的内部生成实例的代码块加上synchroniz ...

  2. java单例模式几种实现方式

    1.饿汉式(线程安全,调用效率高,但是不能延时加载): public class ImageLoader{ private static ImageLoader instance = new Imag ...

  3. 线程的三种创建方式以及代码实现

    线程和进程的概念 一个进程可以有多个线程 程序:是指令和数据的有序集合(静态的) 进程:是执行程序的一次执行过程(动态的),是系统资源分配的单位.在操作系统中运行的程序就是进程. 通常在一个进程中可以 ...

  4. 转- java单例模式几种实现方式

    转自: https://www.cnblogs.com/ngy0217/p/9006716.html : 单例模式的五种实现方式 1.饿汉式(线程安全,调用效率高,但是不能延时加载): 1 2 3 4 ...

  5. 多线程python实现方式_python多线程的两种实现方式(代码教程)

    本篇文章给大家带来的内容是关于python多线程的两种实现方式(代码教程),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 线程是轻量级的进程,进程中可划分出多个线程,线程可独立的调度 ...

  6. C# 三种打印方式含代码

    一:C#代码直接打印pdf文件(打印质保书pdf文件) 引用: 代码注释很详细了. private void btn_pdf_Click(object sender, RoutedEventArgs ...

  7. 设计模式之单例模式8种实现方式,其二:饿汉式-静态代码块饿汉式

    饿汉式(静态代码块)应用步骤: 1.构造器私有化 2.创建类的静态变量,不实例化 3.静态代码块实例化 4.向外部暴露一个静态的公共方法 案例: package singlePattern;publi ...

  8. java 多线程的单例模式,Java多线程中的单例模式两种实现方式

    Java多线程中的单例模式 一.在多线程环境下创建单例 方式一: package com.ietree.multithread.sync; public class Singletion { priv ...

  9. linux postgresql默认安装目录,postgresql - 三种安装方式(示例代码)

    最近接触了postgresql的安装,和大家分享一下. 一.简 介 PostgreSQL 是一种非常复杂的对象-关系型数据库管理系统(ORDBMS),也是目前功能最强大,特性最丰富和最复杂的自由软件数 ...

  10. 设计模式之单例模式8种实现方式,其八:枚举方式

    实现方式: package singlePattern;enum Singleton{INSTANCE;public void method(){} } 优缺点说明: 1.这借助JDK1.5中添加的枚 ...

最新文章

  1. python 获取你电脑纯文本文档内容!解决IndentationError: expected an indented block报错!
  2. 生活点滴:java基础知识细化
  3. 在python中len表示的数据类型是_python基本数据类型学习
  4. 第6章 Python 数字图像处理(DIP) - 彩色图像处理2 - 灰度分层(灰度分割)和彩色编码,灰度值到彩色变换,Gray to RGB
  5. Android之java.lang.OutOfMemoryError: Failed to allocate a ** byte allocation with **free bytes and 2M
  6. 删除已弃用的CMS垃圾收集器的JEP草案
  7. Python应用实战-用pandas实现数据预处理
  8. ascii码和unicode
  9. redis数据类型之hash入门
  10. java斗地主发牌源码
  11. ZOJ 2412 Farm Irrigation
  12. 人人商城源码怎么安装MySQL_人人商城插件开发手记
  13. DB9串口定义及含义(全)
  14. 音视频学习(五)——H.264视频码流
  15. 新浪微博发布文章html,微博网页版如何发布头条文章
  16. JavaScript广告图片跟随滚动
  17. 微分方程建模实例:对药剂量开处方
  18. 多元线性回归之预测房价
  19. 【微信小程序】自定义加载动画4
  20. 假如生活欺骗了你之ARP欺骗,原理图

热门文章

  1. 【DEVOPS】DevOps推进过程中的一些最佳实践
  2. 电路布线问题(迷宫问题)
  3. 【软件分析/静态程序分析学习笔记】1.静态程序分析(Static Program Analysis)介绍
  4. 银河麒麟操作系统下载地址收集
  5. Wpf 初学---01设计一个优美的注册界面
  6. tftp服务器上传文件至华三ac,ftp和tftp 上传文件到h3c交换机
  7. 如何批量压缩图片体积大小kb?
  8. 人教版四年级上次计算机教案,人教版四年级上册数学教案
  9. 马哥Linux命令大全
  10. POJ-1067 取石子游戏(威佐夫博弈)