当前位置: 首页 > news >正文

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

单例模式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类

在这里插入图片描述

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类
在这里插入图片描述

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);
    }
}

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

相关文章:

  • 【Java从入门到起飞】数组
  • Pycharm下载|附安装包+详细安装教程
  • 网卡驱动架构以及源码分析
  • 炫影智能轻云盒(智慧小盒)移动版SY910_RK3528芯片_2+8G_安卓9.0_免拆固件包
  • 使用Java爬虫获取1688 item_search_factory 接口的工厂搜索数据
  • Ubuntu 下 nginx-1.24.0 源码分析 - ngx_init_setproctitle函数
  • 49 set与map的模拟实现
  • 独立开发者灵感日报:简化您生活的 IT 聊天机器人
  • 每天设计者模式-2:如何夯实基础
  • 基于ffmpeg+openGL ES实现的视频编辑工具-添加背景音乐(十)
  • 掌握 ElasticSearch 组合查询:Bool Query 详解与实践
  • 演示基于FPGA的视频图像去雾处理效果
  • 算法——母牛的故事(递归+迭代)
  • 【GreatSQL优化器-15】index merge
  • springcloud gateway并发量多大
  • 03.Docker 命令帮助
  • 解决npm问题:错误的代理设置
  • 构建高可用和高防御力的云服务架构第一部分:深入解析DDoS高防(15)
  • CDGA|企业数据治理实战:从疏通“信息河”到打造优质“数据湖”
  • 采用DDNS-GO与cloudflare实现双域名同时访问NAS
  • 怎么做网站一张图/体验式营销
  • 中小企业网站建设与推广/郑州网站技术顾问
  • 奉化云优化seo/seo公司的选上海百首网络
  • 做直播网站赚钱吗/百度推广区域代理
  • 武安企业做网站推广/北京百度搜索优化
  • 如何做导购网站/关键词seo排名怎么做的