Java设计模式:单例Singleton

单例(基于多线程的编程)

Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。

在项目的很多地方都会用到它,比如说数据库的链接。

使用Singleton的好处还在于可以节省内存,因为它限制了实例的个数,有利于Java垃圾回收(garbage collection)。

实现方法

确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类称为单例类,并提供一个访问它的全局访问点:

  1. 创建私有静态对象
  2. 构造私有方法
  3. 创建公有静态get对象方法

三个要点

一是某个类只能有一个实例;

二是它必须自行创建这个实例;

三是它必须自行向整个系统提供这个实例。

两种单态模式的区别

时间和空间

懒汉式是典型的时间换空间,也就是每次获取实例都会进行判断,看是否需要创建实例。如果一直没有人使用的话,那就不会创建实例,节约内存空间。

延迟加载:开始不加载资源或者数据,等到马上就要使用这个资源或数据了才加载,所以也称LazyLoad(延迟加载)。

private static 类名 对象名;//声明对象
private 类名() {}//私有构造方法
public static 类名 get对象名(){//单例化对象
    if(对象名 == null)
    对象名 = new 类名();
    return 对象名;
}

饿汉式是典型的空间换时间,当类装载的时候就会创建类实例,不管你用不用,先创建出来,然后每次调用的时候,就不需要再判断,节省运行时间。

private static 类名 对象名 = new 类名();
private 类名() {}
public static 类名 get对象名(){
    return 对象名;
}

线程安全

从线程安全性上讲,不加同步的懒汉式是线程不安全的。

饿汉式是线程安全的,因为虚拟机保证了只会装载一次,在装载类的时候是不会发生并发的。

总结

单例类的构造函数为私有。

提供一个自身的静态私有成员变量。

提供一个公有的静态工厂方法。

单例模式的思想是什么?请写一个代码体现。

开发:饿汉式(是不会出问题的单例模式)

面试:懒汉式(可能会出问题的单例模式)

  • 懒加载(延迟加载)
  • 线程安全问题
    • 是否多线程环境:是
    • 是否有共享数据:是
    • 是否有多条语句操作共享数据 :是

Runtime

Runtime类属于java.lang包中的类,Runtime类封装了运行时的环境。每个 Java 应用程序都有一个 Runtime 类实例,使应用程序能够与其运行的环境相连接。

Runtime类的设计采用的是单例设计模式(饿汉式)。

实例

getRuntime():该方法用于返回当前应用程序的运行环境对象。

exec(String command):该方法用于根据指定的路径执行对应的可执行文件。

public static void main(String[] args) throws IOException, InterruptedException {
    Runtime runtime = Runtime.getRuntime();
    Process process = runtime.exec("C:\\Windows\\notepad.exe");//打开记事本程序,并返回一个进程
    Thread.sleep(3000); //让当前程序停止3秒。
    process.destroy();
}

运行结果

freeMemory():该方法用于返回Java虚拟机中的空闲内存量,以字节为单位。

maxMemory():该方法用于返回Java虚拟机试图使用的最大内存量。

totalMemory():该方法用于返回Java虚拟机中的内存总量。

public static void main(String[] args) throws IOException{
    Runtime runtime = Runtime.getRuntime();
    System.out.println("Java虚拟机中的空闲内存量:"+runtime.freeMemory());
    System.out.println("Java 虚拟机试图使用的最大内存量:"+ runtime.maxMemory());
    System.out.println("返回 Java 虚拟机中的内存总量:"+ runtime.totalMemory());
}

运行结果

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值