1.饿汉式(直接创建)三种创建方法代码里面都有

第三种静态代码块方式,需要创建个properties文件


package java2;import java.io.IOException;
import java.util.Properties;/*** 单例模式设计步骤:* 1.构造器私有化* 2.内部创建对象实例,并用静态变量保存* 3.向外提供获取的方法* 强调这是一个单例,我们可以用final修改**//*** 一、饿汉式:在类初始化时直接创建对象,不管你是否需要这个对象,不存在线程安全问题** (1.1)直接创建实例对象*/
class Singleton1{public static final Singleton1 INSTANCE = new Singleton1();private Singleton1(){}
}
/*** (1.2)枚举类型,就是该类型对象是有限个*/
enum Singleton2 {INSTANCE
}/*** (1.3)静态代码块方法*/class Singleton3{public static final Singleton3 INSTANCE;private String info;//如何构造器传的值需要从文件里获取,那么就需要用到静态代码来实现单例static {try {Properties pro = new Properties();pro.load(Singleton3.class.getClassLoader().getResourceAsStream("Single.properties"));INSTANCE = new Singleton3(pro.getProperty("info"));} catch (IOException e) {throw new RuntimeException(e);}}private Singleton3(String info){this.info = info;}}public class Singleton_e {public static void main(String []args){Singleton1 singleton1 = Singleton1.INSTANCE;System.out.println(singleton1);//枚举类型这里直接打印出来了,因为枚举重写了toString方法Singleton2 singleton2 = Singleton2.INSTANCE;System.out.println(singleton2);Singleton3 singleton3 = Singleton3.INSTANCE;System.out.println(singleton3);}
}

懒汉式(用到的时候才创建)三种创建方法

package java2;/*** 二、懒汉式:演示创建这个实例对象** (1)构造器私有化* (2)用一个静态变量保存这个唯一实例* (3)提供一个静态方法,获取这个实例对象*/import java.util.concurrent.*;
/*** (2.1)多线程下,线程不安全*/
class Singleton4{private volatile static Singleton4 INSTANCE = null;private Singleton4(){System.out.println(Thread.currentThread().getName()+"\t线程调用构造");}public static Singleton4 getINSTANCE() {if (INSTANCE == null){INSTANCE = new Singleton4();}return INSTANCE;}
}
/*** (2.2)改进版volatile+双端检索机制*/
class Singleton5{private volatile static Singleton5 INSTANCE = null;private Singleton5(){System.out.println(Thread.currentThread().getName()+"\t线程调用构造");}//这里用volatile+双端检索机制public static Singleton5 getINSTANCE() {try {TimeUnit.SECONDS.sleep(1); } catch (InterruptedException e) { e.printStackTrace(); }if (INSTANCE == null) {synchronized (Singleton5.class){if (INSTANCE == null){INSTANCE = new Singleton5();}}}return INSTANCE;}
}/***(2.3)静态内部类形式,线程安全的* 在内部类被加载和初始化时,才会创建INSTANCE实例对象* 静态内部类不会自动随外部类的加载和初始化而初始化,它是要单独去加载和初始化的* 因为是在内部类加载和初始化时,创建的,因此是线程安全的*/
class Singleton6{private Singleton6() { }//静态内部类private static class Inner{private static final Singleton6 INSTANCE = new Singleton6();}//获取public static Singleton6 getInstance(){return Inner.INSTANCE;}
}public class Singleton_lan {public static void main(String []args) throws ExecutionException, InterruptedException {//(2.1)多线程下,线程不安全Singleton4 singleton4 = Singleton4.getINSTANCE();//(2.2)改进版Callable<Singleton5> callable = new Callable<Singleton5>() {@Overridepublic Singleton5 call() throws Exception {return Singleton5.getINSTANCE();}};ExecutorService threadpool = Executors.newFixedThreadPool(2);Future<Singleton5> f1 = threadpool.submit(callable);Future<Singleton5> f2 = threadpool.submit(callable);Singleton5 s1 = f1.get();Singleton5 s2 = f2.get();threadpool.shutdown();System.out.println(s1 == s2);System.out.println(s1);System.out.println(s2);//(2.3)静态内部类形式Singleton6 singleton6 = Singleton6.getInstance();System.out.println(singleton6);}
}

java单例模式(饿汉式和懒汉式的几种不同写法)相关推荐

  1. 单例模式饿汉式与懒汉式详解

    单例模式饿汉式与懒汉式详解 步骤: 私有构造方法,使得在类的外部不能调用此方法,限制产生多个对象 类初始化时,区分饿汉式与懒汉式的区别 对外部提供调用方法,将创建的对象返回,只能通过类来调用 饿汉式: ...

  2. java 单例模式 ---饿汉式懒汉式

    目录 单例设计模式 饿汉式 懒汉式 饿汉式vs懒汉式 结语 单例设计模式 所谓单例设计模式,就是采取一定的方法在整个软件系统中,对某个类只能存在一个对象实例 1.单例类只能有一个实例. 2.单例类必须 ...

  3. Java-Day12 面向对象的三大特征之封装、继承,单例模式(饿汉式、懒汉式)、方法重写 (覆盖)、注解 (annotation)、super关键字、对象的创建流程超详细

    目录 1. 面向对象的三大特征之封装 1.1 封装的含义 1.2 封装的目的 1.3 封装的优点 1.4 封装的实现过程 1.5 拓展知识:JavaBean 2. 面向对象的三大特征之继承 2.1 继 ...

  4. Singleton模式(单例模式) 饿汉式和懒汉式

    目的:整个应用中有且只有一个实例,所有指向该类型实例的引用都指向这个实例. 好比一个国家就只有一个皇帝(XXX),此时每个人叫的"皇帝"都是指叫的XXX本人; 常见单例模式类型: ...

  5. 单例模式——饿汉式和懒汉式

    单例模式:一个类只允许存在唯一的对象,并提供它的访问方式 创建思路: 1.禁止在类的外部创建对象:私有化构造函数 2.在类的内部提供唯一的对象:静态成员变量 3.提供访问唯一对象的方法:静态成员函数 ...

  6. Java中单例模式—饿汉式和懒汉式

    所谓单例模式就是为了确保类在内存中只有一个对象,之所以会出现单例模式是因为,单例模式在系统内存中只存在一个对象,可以节约资源 目录 一.饿汉式 二.懒汉式 一.饿汉式 该方式在开发中是经常用的,因为这 ...

  7. 【学习笔记】【C++整理A】【总】单例模式-饿汉式、懒汉式;

    文章目录 一.语言分类: 三.基础A:- 函数重载.默认参数.extern "C".重复包含 1.函数重载 2.默认参数 3.extern "C" 4.防止重复 ...

  8. Java实现单例模式之饿汉式、懒汉式、枚举式,带测试。

    Java实现单例的3种普遍的模式,饿汉式.懒汉式.枚举式. 具体代码如下: package com.lcx.mode;/*** * 饿汉式单例,不管以后用不用这个对象,我们一开始就创建这个对象的实例, ...

  9. java学习之单例模式(饿汉式与懒汉式)

    ---恢复内容开始--- 设计模式:解决某一类问题最行之有效的方法 java中有23种设计模式 今天学习其中一种:单例设计模式:解决一个类在内存只存在一个对象 想要保证对象唯一. 1.为了避免其他程序 ...

最新文章

  1. android位置传感器
  2. eeglab教程系列(13)-学习和删除ICA组件
  3. 提升Transformer效率又有新招?基于矩阵分解的线性化Attention方案
  4. 用实例分析H264 RTP payload
  5. 没想到我的粉丝里还有这么多C++er,瑞思拜!
  6. 5G远程驾驶亮相进博会 网友:以后考个远程驾照?
  7. 低字节+高字节+字地址+大端序+小端序全辨析
  8. JAVA宠物寄养管理系统计算机毕业设计Mybatis+系统+数据库+调试部署
  9. 逼疯UE设计师,不可不知的提升产品用户体验的10个测试方法
  10. Unity 将3D物体的世界坐标转换为对应的屏幕坐标
  11. 开发工具之IAR下载与安装
  12. 橘子识别java_Java方法
  13. Dazdata BI产品3D+BI医院综合管理应用案例
  14. firebug 四款插件
  15. 数据结构与算法——广度和深度优先搜索
  16. Python之pyc文件作用及生成方法
  17. 爬虫实战 | 手把手用Python教你采集可视化知乎问题的回答(内附代码)
  18. lims 系统 服务器 强大,实验室信息管理系统(LIMS)详解
  19. STC89C52RC定时器2串口通信
  20. web前端开发学什么?自学需要多久?

热门文章

  1. mysql command line client闪一下消失
  2. 2.3 Factory Method(工厂方法)
  3. [Java学习资料] [成长之路]
  4. pta - 1132 Cut Integer
  5. Java学习笔记11-1——Spring5
  6. C#多线程时对同一资源加锁实现互斥访问
  7. 手机全部零件名称图片_【直播课】一条记录中显示多张图片
  8. DocumentFragment使用
  9. android 画布心形,Android CustomShapeImageView对图片进行各种样式裁剪:圆形、星形、心形、花瓣形等...
  10. 计算机网络关于封装成帧题目,上海第二工业大学-计算机网络通信期中试卷答案...