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

news/2025/2/24 16:34:44

单例模式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.niftyadmin.cn/n/5864578.html

相关文章

在 Ubuntu 22 上使用 Gunicorn 启动 Flask 应用程序

目录 背景步骤 1: 安装 Flask 和 Gunicorn步骤 2: 创建 Flask 应用程序步骤 3: 使用 Gunicorn 启动 Flask 应用步骤 4: 访问应用程序步骤 5: 配置 Gunicorn 为系统服务&#xff08;可选&#xff09;总结 背景 Flask 是一个轻量级的 Python Web 框架&#xff0c;广泛应用于开发…

微信小程序-二维码绘制

wxml <view bindlongtap"saveQrcode"><!-- 二维码 --><view style"position: absolute;background-color: #FFFAEC;width: 100%;height: 100vh;"><canvas canvas-id"myQrcode" style"width: 200px; height: 200px;ba…

CentOS 7.9 解决 python3 报错 ModuleNotFoundError: No module named ‘_ssl‘ 的问题

方法&#xff1a;直接将系统的 openssl 升级到高版本 OpenSSL 1.1.1 具体步骤&#xff1a; 1. 手动编译 OpenSSL 1.1.1 bash # 安装编译依赖 sudo yum install -y perl-core zlib-static# 下载并编译 OpenSSL wget https://www.openssl.org/source/openssl-1.1.1w.tar.gz tar…

【网络安全】常见的web攻击

1、SQL注入攻击 定义&#xff1a; 攻击者在HTTP请求中注入恶意的SQL代码&#xff0c;当服务器利用参数构建SQL语句的时候&#xff0c;恶意的SQL代码被一起构建,并在数据库中执行。 示例&#xff1a; 用户登录&#xff1a; 输入用户名xx&#xff0c; 密码 or 1 …

C#: 日志函数

背景&#xff1a; 1.常见的官方日志模块项目过于复杂&#xff0c;且配置过于繁琐&#xff0c;针对这种现象&#xff0c;实现在大型项目中快速定位错误问题&#xff1b; 实现思路&#xff1a; 1.设置当前日志文件路径&#xff08;获取到当前文件应用程序路径 \ErrorLog) 2.判…

五、Three.js顶点UV坐标、纹理贴图

一部分来自1. 创建纹理贴图 | Three.js中文网 &#xff0c;一部分是自己的总结。 一、创建纹理贴图 注意&#xff1a;把一张图片贴在模型上就是纹理贴图 1、纹理加载器TextureLoader 注意&#xff1a;将图片加载到加载器中 通过纹理贴图加载器TextureLoader的load()方法加…

Qt 中的线程池QRunnable和QThreadPool

Qt 中的线程池QRunnable和QThreadPool 一、QThreadPool类介绍 QThreadPool 是 Qt 框架中用于管理线程池的类&#xff0c;它提供了一种高效的方式来管理和复用线程&#xff0c;避免频繁创建和销毁线程带来的开销。 1. 基本概念 QThreadPool 是一个全局的线程池&#xff0c;它…

猿大师播放器:智慧安防网页播放RTSP H.265实时监控革命,无需转码终极解决方案

一、智慧安防的致命瓶颈&#xff1a;当传统技术拖累生命安全 在智慧城市、工业安全、应急指挥等场景中&#xff0c;实时视频监控是守护生命与财产的核心防线。然而&#xff0c;传统RTSP播放方案在延迟、成本、稳定性上的缺陷&#xff0c;正在成为安防系统的“阿喀琉斯之踵”。…