第一种:饿汉式

/*** Created with IntelliJ IDEA.** @author: 宸濯* Date: 2021/08/18 8:21* Description:单例模式的设计(饿汉式)* 1.构造方法私有化* 2.在静态语句块实例化* 3.提供调用实例对象的方法* 4.空间换时间,不管有没有调用方法,实例都创建了* Version: V1.0*/
public class SingletonOne {private static final int THREADS=100;private static SingletonOne instance;/*** 构造方法私有化*/private SingletonOne(){}static {instance=new SingletonOne();}public static SingletonOne getInstance(){return instance;}public static void main(String[] args) {for (int i=0;i<THREADS;i++){new Thread(()-> System.out.println(getInstance().hashCode())).start();}}
}

第二种:懒汉式

/*** Created with IntelliJ IDEA.* @author: 宸濯* Description:单例模式设计(懒汉式)* 1.构造方法私有化* 2.在调用时判断是否实例化* 3.时间换空间,调用方法时创建实例对象*/
public class SingletonTow {private static SingletonTow instance;private static final int THREADS=100;private SingletonTow(){}public static SingletonTow getInstance(){if (instance==null){instance=new SingletonTow();}return instance;}public static void main(String[] args) {for (int i=0;i<THREADS;i++){new Thread(()-> System.out.println(getInstance().hashCode())).start();}}
}

第三种:双检锁式

/*** Created with IntelliJ IDEA.* @author: 宸濯* Description:单例模式设计(双检锁懒汉式)* 1.构造方法私有化* 2.在调用时判断是否实例化* 3.时间换空间,调用方法时创建实例对象*/
public class SingletonTow {/*** volatile修饰符防止指令重排序*/private static volatile SingletonTow instance;private static final int THREADS=100;private SingletonTow(){}public static SingletonTow getInstance(){if (instance==null){synchronized (SingletonTow.class){//双重判定,防止高并发,不过会导致指令重排序if (instance==null){instance=new SingletonTow();}}}return instance;}public static void main(String[] args) {for (int i=0;i<THREADS;i++){new Thread(()-> System.out.println(getInstance().hashCode())).start();}}
}

java并发编程:volatile关键字解析

第四种:静态内部类式

/*** Created with IntelliJ IDEA.** @author: 宸濯* Description:设计单例模式* 1.构造方法私有化* 2.静态内部类实例化对象* 3.静态内部类只会被加载一次,类加载的初始化阶段是单线程的,没有高并发带来的冲突*/
public class SingletonThree {/*** 声明线程数*/private static final int THREADS=100;private static class Inner{private static final SingletonThree INSTANCE=new SingletonThree();}private SingletonThree(){}public static SingletonThree getInstance(){return Inner.INSTANCE;}public static void main(String[] args) {for (int i=0;i<THREADS;i++){new Thread(()-> System.out.println(SingletonThree.getInstance().hashCode())).start();}}
}

第五种:枚举类型

/*** Created with IntelliJ IDEA.* @author : 宸濯*/
public enum  SingletonFour {//枚举类型设计单例模式SINGLETON_FOUR;public void test(){System.out.println("hello world");}}public class Main {public static void main(String[] args) {SingletonFour.SINGLETON_FOUR.test();}
}

java 单例模式实现的5种方式相关推荐

  1. 12月18日云栖精选夜读 | Java 中创建对象的 5 种方式!...

    作为Java开发者,我们每天创建很多对象,但我们通常使用依赖管理系统,比如Spring去创建对象.然而这里有很多创建对象的方法,我们会在这篇文章中学到. Java中有5种创建对象的方式,下面给出它们的 ...

  2. Java中创建对象的几种方式

    Java中创建对象的几种方式 1.使用new创建对象,在堆上创建. 2.克隆 3.反序列化 4.反射创建对象 5.NIO中可以使用本地方法直接分配堆外内存. 转载于:https://www.cnblo ...

  3. Java中创建对象的四种方式

    为什么80%的码农都做不了架构师?>>>    Java中创建对象的四种方式 (1) 用new语句创建对象,这是最常见的创建对象的方法.    (2) 运用反射手段,调用java.l ...

  4. java解析xml的几种方式

    java解析xml的几种方式 博客分类: java基础备忘-好记性不然烂笔头 XMLJava应用服务器数据结构编程  第一种:DOM. DOM的全称是Document Object Model,也即文 ...

  5. 创建和应用Java包文件的两种方式(转)

    创建和应用Java包文件的两种方式(转) <Java编程艺术>章节选登.作者:高永强 清华大学出版社 (即将出版) 12.1  包--package    ... 12.1.1  包命名规 ...

  6. java制作oracle程序,Java程序操作Oracle两种方式之简单实现

    Java程序操作Oracle两种方式之简单实现 1.通过JDBC-ODBC桥连接Oracle数据库 (1)创建odbc源,在控制面板->管理工具->数据源(odbc)中添加DSN,比如取名 ...

  7. java 复制文本内容_基于java文本复制的7种方式总结

    如下所示: package copy; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import ...

  8. Java字符串连接的几种方式

    Java字符串连接的几种方式 字符串表现的几种方式 StringBuffer和StringBuilder及String的继承关系 字符串的连接 1.String的连接方法 可以看出连接方式是新建了一个 ...

  9. Java 实现抽奖的两种方式

    Java实现抽奖的两种方式 方式一:随机数在哪个区间内返回区间下标 方式二:随机数加入区间点集合排序返回随机数下标 代码示例: ①抽奖入参类型为BigDecimal: package com.cfay ...

  10. Java解析Xml的三种方式总结

    转自:http://blog.csdn.net/zjf280441589/article/details/50613881 XML解析技术有两种 DOM SAX DOM方式  根据XML的层级结构在内 ...

最新文章

  1. 腾讯的电商,在东南亚击败了阿里巴巴
  2. AtomicInteger
  3. Tornado源码分析 --- 静态文件处理模块
  4. Asp程序做页面的301跳转,使得cnasda.com跳转到www.cnasda.com
  5. solr创建索引_Solr:创建拼写检查器
  6. golang学习和使用经验总结
  7. Linux查看和修改IP地址
  8. 软考-嵌入式系统设计师-笔记:嵌入式系统的项目开发与维护
  9. Hive 动态分区恢复静态分区表数据
  10. 小鸟云服务器如何通过本地安全策略阻止IP访问?
  11. 编程达人教你如何快速掌握一门编程语言附技术书阅读方法论
  12. 更改设置让Cheat Engine搜索安卓模拟器里的数据
  13. 『Python核心技术与实战』pandas.DataFrame()函数介绍
  14. iview 表格合并行
  15. uni-app使用Hbuilder X如何安卓APP打包、发布、运行
  16. 数据库与身份认证:在项目中操作 MySQL
  17. 转发保留不错一篇 数学模型神经网络在程序化交易模型构建中的运用探讨
  18. 【exe4j】如何利用exe4j把java桌面程序生成exe文件
  19. java线程知识总结
  20. 由年化收益率一词引申出的投资理财想法和公式

热门文章

  1. 人工智能系列:AI 赋能平台
  2. selenium模拟点击爬取微博评论消息
  3. 推荐几款好用的网站CMS管理系统
  4. 【Web前端】儿童摄影网——网页制作代码
  5. 华胜天成-容灾流程管理平台解决方案
  6. 应用程序无法正常启动(0xc0150002)
  7. 9款主流图表控件轻松实现数据可视化
  8. Nacos 国内镜像
  9. 基于vhdl的分频器设计
  10. 汉字、图形,Zebra打印机完全解决方案