java 单例模式(Lazy Initialization)实现遍历文件夹下所有excel文件且返回其运行时间

ops/2025/2/27 15:31:14/

单例模式Singleton介绍

  • 定义

java核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中,应用该模式的类一个类只有一个实例。即一个类只有一个对象实例

  • 实现思路
    将该类的构造方法定义为私有方法,这样其他处的代码就无法通过调用该类的构造方法来实例化该类的对象,只有通过该类提供的静态方法来得到该类的唯一实例;

在该类内提供一个静态方法,当我们调用这个方法时,如果类持有的引用不为空就返回这个引用,如果类保持的引用为空就创建该类的实例并将实例的引用赋予该类保持的引用。

  • Lazy Initialization
  1. 单例的实例在第一次被使用时创建,而不是在类加载时就立即创建。
  2. 由于它在多线程环境下可能会导致多个实例被创建,因此不推荐在多线程环境中使用
  3. 为了解决同步开销问题,可以使用双重检查锁定机制。这种方式只在instance为null时才进行同步。
  • 举例(maven)版
    实现遍历文件夹下所有excel文件的时间对比
    一、在pom.xml文件中插入如下代码块
    在这里插入图片描述
    <dependencies><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-core</artifactId><version>2.17.1</version> <!-- 使用最新的稳定版本 --></dependency><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-api</artifactId><version>2.17.1</version> <!-- 使用最新的稳定版本 --></dependency><!-- Apache HttpClient --><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.5.13</version></dependency><!-- Apache POI for Excel --><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>5.2.2</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>5.2.2</version></dependency><!-- Jackson for JSON parsing --><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.13.4.2</version></dependency></dependencies>

二、点击右侧maven工程管理
在这里插入图片描述
刷新maven

三、创建ExcelFileManager java

在这里插入图片描述

java">package com.test_Ana;import java.io.*;public class ExcelFileManager {// 私有静态变量,持有类的唯一实例private static volatile ExcelFileManager instance;// 私有构造函数,防止外部直接创建对象private ExcelFileManager() {}// 公共静态方法,返回类的唯一实例public static ExcelFileManager getInstance() {if (instance == null) { // 第一次检查synchronized (ExcelFileManager.class) {if (instance == null) { // 第二次检查instance = new ExcelFileManager();}}}return instance;}// 方法来遍历文件夹中的所有Excel文件public void traverseExcelFiles(String folderPath) {long startTime = System.currentTimeMillis(); // 记录开始时间File folder = new File(folderPath);File[] listOfFiles = folder.listFiles();if (listOfFiles != null) {for (File file : listOfFiles) {if (file.isFile() && file.getName().endsWith(".xls") || file.getName().endsWith(".xlsx")) {// 处理Excel文件,例如读取内容等System.out.println("Processing: " + file.getName());}}}long endTime = System.currentTimeMillis(); // 记录结束时间System.out.println("Time taken: " + (endTime - startTime) + " ms"); // 输出运行时间}
}

三、在main中调用ExcelFileManager类
在这里插入图片描述

java">package com.test_Ana;public class Main {public static void main(String[] args) {// 假设你的Excel文件存放在D:\ExcelFiles路径下String folderPath = "C:\\Users\\17435\\Desktop\\temp";ExcelFileManager excelFileManager = ExcelFileManager.getInstance();excelFileManager.traverseExcelFiles(folderPath);}
}

运行结果如下:
在这里插入图片描述


http://www.ppmy.cn/ops/161712.html

相关文章

buuctf-简单注册器题解

下载好资源包解压&#xff0c;发现是apk文件。 这里用apk改之理这个软件打开这个文件。 从这里用idea打开class文件&#xff0c;查看main函数 发现了这些代码&#xff0c;看到了注册码错误&#xff0c;那么上面的判断就是正确的flag 那么只要将题目给出的var5里的数值通过下面…

通过阿里云RDS排查解决MYSQL慢SQL--图文教学

通过自治服务和DMS解决数据库IOPS过高的问题&#xff0c;包括排查慢SQL、确定优化方向和使用无锁变更等步骤。 数据库IOPS居高不下&#xff0c;影响过多API业务信息 1. 跟进告警内容 【自治服务】-》【一键诊断】-》【当前资源使用率】-》【IOPS】 RDS-一键诊断 2. 排查慢…

MySQL 中如何查看 SQL 的执行计划?

SQL 语句前面使用 EXPLAIN 关键字&#xff1a; EXPLAIN SELECT * FROM users WHERE id 1; 字段 含义 id 查询的序号&#xff08;如果是子查询或联合查询&#xff0c;会有多个 id&#xff09;。 select_type 查询的类型&#xff08;简单查询、子查询、联合查询等&#xff…

使用快捷键高效管理 VSCode:提升工作效率,告别鼠标操作

如果你想提高工作效率&#xff0c;减少鼠标操作&#xff0c;掌握键盘快捷键是一个非常有效的方式。在编程过程中&#xff0c;熟练使用快捷键能够快速管理文件、标签页&#xff0c;节省时间并提升效率。比如&#xff0c;Ctrl P 和 Ctrl W 可以快速打开和关闭文件&#xff0c;而…

centos9之ESXi环境下安装

一、centos9简介 CentOS Stream 9是一个基于RHEL&#xff08;Red Hat Enterprise Linux&#xff09;的开源操作系统。它是CentOS Stream系列的最新版本。CentOS Stream是一个中间发行版&#xff0c;位于RHEL和Fedora之间&#xff0c;旨在提供更及时的软件更新和新功能。CentOS …

刚充值Deepseek账号,但接入官方的API却遇到了问题【VSCode Cline Cursor Deepseek deepseek-reasoner】

本文解决以下疑难杂症: 使用deepseek的最新接模型接入ide 使用deepseek的最新接模型接入vscode 使用deepseek的最新接模型接入vscode中的Cline 使用deepseek的最新接模型接入Cline 使用cursor接入Deepseek官方的的deepseek-reasoner模型api&#xff0c;而不是使用cursor p…

WSL2下,向github进行push时出现timeout的问题

昨晚在完成15445 Project2.2后&#xff0c;笔者兴致冲冲地准备把代码提交到github上&#xff0c;谁知一连提交几次都出现 ssh:connect to host github.com port 22: Connection timed out 这个问题。我开始还以为是网络波动&#xff0c;测试了多次之后才发现应该是22端口出问题…

【苍穹外卖】问题笔记

【DAY1 】 1.VCS找不到 好吧&#xff0c;发现没安git 接着发现安全模式有问题&#xff0c;点开代码信任此项目 2.导入初始文件&#xff0c;全员爆红 好像没maven&#xff0c;配一个 并在设置里设置好maven 3.启用注解&#xff0c;见新手苍穹 pom.xml改lombok版本为1.1…