一,饱汉

public class SingleTon {private SingleTon(){}private final static SingleTon instance = new SingleTon();public static SingleTon getInstance(){return instance;}public static void main(String[] args) {System.out.println("Main方法");}
}

public class SingleTon {private SingleTon(){}public final static SingleTon instance = new SingleTon();
}

二,饿汉,延迟初始化

public class SingleTon2 {private SingleTon2() {System.out.println("构造方法");}private static SingleTon2 instance = null;public static synchronized SingleTon2 getInstance() {if (instance == null) {instance = new SingleTon2();}return instance;}
}

二.二  也算是饿汉,但是减少synchronized性能开销的同时,避免double-checked locking

public class SingleTon4 {private static volatile SingleTon4 instance = null;private SingleTon4(){}public static SingleTon4 getInstance(){if(instance == null){synchronized (SingleTon4.class) {if(instance == null){instance = new SingleTon4();}}}return instance;}
}

三,基于类初始化的解决方案。线程安全的延迟初始化方案

JVM在类的初始化阶段(即在Class被加载后,且被线程使用之前),会执行类的初始化。
在执行类的初始化期间,JVM会去获取一个锁。这个锁可以同步多个线程对同一个类的初始化。
基于这个特性,可以实现另一种线程安全的延迟初始化方案(这个方案被称之为Initialization On Demand Holder idiom)

public class SingleTon5 {private SingleTon5(){System.out.println("heihi");}private static class InstanceHolder {public static SingleTon5 instance = new SingleTon5();}public static SingleTon5 getInstance() {return InstanceHolder.instance ;  //这里将导致InstanceHolder类被初始化}
}

四,枚举类实现

/*** 单元素的枚举类型是实现单例的最佳方法*/
public enum SingleEnum {INSTANCE;public void sayHello(){System.err.println("Hello me");}
}

五,记录式单例

jkd8
public class SingleTon3_3 {private static Map<String, SingleTon3_3> map = new HashMap<String, SingleTon3_3>();private SingleTon3_3(String name) {}public static SingleTon3_3 getInstance(String name) {name = Objects.toString(name, SingleTon3_3.class.getName());return map.computeIfAbsent(name, SingleTon3_3::new);}
}
jdk7
/*** 记录式单例*/
public class SingleTon3 {private static Map<String, SingleTon3> map = new HashMap<String, SingleTon3>();static {SingleTon3 single = new SingleTon3();map.put(single.getClass().getName(), single);}private SingleTon3() {System.out.println("构造method");}public static SingleTon3 getInstance(String name) {if (name == null) {name = SingleTon3.class.getName();}if (map.get(name) == null) {System.out.println("得到" + name);try {map.put(name, (SingleTon3) Class.forName("single_ton.SingleTon3").newInstance());} catch (InstantiationException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();} catch (ClassNotFoundException e) {e.printStackTrace();}}return map.get(name);}
}

java基础,单例总结相关推荐

  1. Java基础 - 单例(饿汉、懒汉),2年以上经验必看

    //r.exec("shutdown -s -t 300"); //300秒后关机r.exec("shutdown -a"); ``` 3.Timer(掌握) ...

  2. java的单例设计模式

    java的单例设计模式包括:饿汉设计模式和懒汉设计模式: 步骤: 1.创建一个对象把他设置为私有的成员变量,保证唯一 2.私有构造方法,防止new一个对象. 3.定义一个公开的静态方法,返回第一步创建 ...

  3. java test20006_Java单例7种测试实践

    单例:一个进程中只能存在唯一一个对象. 1.饿汉模式. 主动型太粗暴./** * @author :jiaolian * @date :Created in 2021-01-10 21:25 * @d ...

  4. filter java 是单例的吗_JAVA 设计模式之 单例模式详解

    单例模式:(Singleton Pattern)是指确保一个类在任何情况下都绝对只有一个实例,并提供一个全局访问点.单例模式是创建型模式.单例模式在现实生活中应用也非常广泛. 在 J2EE 标准中,S ...

  5. java设计模式 单例_java设计模式一(单例模式singleton)

    1 概述 如果要保证系统里一个类最多只能存在一个实例时,我们就需要单例模式.这种情况在我们应用中经常碰到,例如缓存池.数据库连接池.线程池.一些应用服务实例等.在多线程环境中为了保证实例的唯一性其实并 ...

  6. was修改类加载模式_java基础——单例(Singleton)模式介绍

    基本概括 详解 一.单例模式定义: 单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例. 二.单例模式特点: 1.单例类只能有一个实例. 2.单例类必须自己创建自己的唯一实例. 3 ...

  7. java httpclient单例_java-8 – CloseableHttpClient.execute每隔几周就会冻结一次,尽管超时...

    我们有一个groovy单例,使用PoolingHttpClientConnectionManager(httpclient:4.3.6),池大小为200,以处理与搜索服务非常高的并发连接并处理xml响 ...

  8. java 窗口 单例_java单例模式实现面板切换

    本文实例为大家分享了java单例模式实现面板切换的具体代码,供大家参考,具体内容如下 1.首先介绍一下什么是单例模式: java单例模式是一种常见的设计模式,那么我们先看看懒汉模式: public c ...

  9. redis java api 单例_Java API 操作Redis

    针对Redis的Java客户端有很多种,具体查看官网信息:https://redis.io/clients#java 本次测试使用Jedis API,Jedis使用方便,其api方法名称与redis命 ...

  10. Java实现单例的5种方式

    转自:https://blog.csdn.net/u014672511/article/details/79774847 1. 什么是单例模式 单例模式指的是在应用整个生命周期内只能存在一个实例.单例 ...

最新文章

  1. Sobel 边缘实现
  2. android system window,Android控件的fitSystemWindows属性
  3. 不追逐标准化产品,360数科的一站式风控体系有何不同?
  4. atom编辑器的安装
  5. 使用STC8H1K的高级PWM的正交编码器计数方式
  6. linux 普通用户touch权限不够_一篇文章让你轻松了解 Linux 的权限
  7. Algorithm之PGM之BNet:贝叶斯网络BNet的相关论文、过程原理、关键步骤等相关配图
  8. 算法题 身高差_10个大数据处理常见算法题
  9. html5语言基础教程,HTML5基础教程,从入门到精通,零基础学HTML5
  10. 1988-B. 有序集合
  11. 80 多个 Linux 系统管理员必备的监控工具
  12. python迭代器与生成器_python的迭代器与生成器实例详解
  13. SecureCRT 登录跳板机自动连接目标服务器
  14. node.js学习笔记(8)--multer模块文件上传
  15. 鸿蒙炼体 等级划分,洪荒的等级划分
  16. 拆弹实验-phase_6
  17. MySQL基础~多表查询分类与SQL92和99语法如何实现内连接和外连接
  18. 天耀18期 - 11.封装类及常用类【作业】
  19. 看到一个蛮有意思的简繁体转换
  20. Centos7安装(四)抓包工具wireshark源码编译安装

热门文章

  1. p中有符号不换行css,css p标签怎么设置不换行
  2. 电脑长时间不关机会缩短寿命吗?
  3. 测试修改和删除用户的功能
  4. 2023年高考真题练习
  5. 免费录音转文字软件有哪些?推荐这几款录音转文字软件
  6. token 令牌完整介绍及使用
  7. 数仓业务上判断一个表的唯一主键是哪几个字段
  8. 私有云 VS 公有云
  9. 关于茶网站-(页面设计)
  10. 荐书丨“积极的废人”如何觉醒?