enum枚举单例的使用

使用情景:java调用dll,在调用dll里面的接口之前,要先调用初始化函数;而这个初始化函数每次都需要执行1分钟才执行完,如果每次调用接口之前都调用一次初始化函数,显然太过浪费时间,很影响用户体验;故用单例模式解决此问题。

1.创建单例类:

/**
 * enum枚举单例的使用
 */
public enum PictureUtil {

    INSTANCE;
    private boolean isInit = false;

    private int init() {    //初始化函数,耗时较长
        System.out.println("开始初始化...");
        try {//模拟消耗资源
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        int result = 0;//初始化成功返回0
        if(result == 0){
            isInit = true;
        }
        return result;
    }

    public int transfer(){  //转换函数
        if(!isInit){
            int res = init();
            System.out.println("核心初始化结果:"+res);
        }
        System.out.println("开始转换...");
        return 0;
    }

    public static void main(String[] args) {
        //在其他类使用示例
        PictureUtil pictureUtil = PictureUtil.INSTANCE;//获取单例
        pictureUtil.transfer();//转换函数
    }
}

2.在controller里面调用单例的方法

package com.example.demo2.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class helloController {
    @RequestMapping("/haha")
    public String haha() {
        PictureUtil pictureUtil = PictureUtil.INSTANCE;//获取单例
        int result = pictureUtil.transfer();
        return "成功:"+result;
    }
}

结果:

多次访问http://localhost:8080/haha

第一次访问后台打印的是:【先执行初始化函数,在执行转换函数】

开始初始化...
核心初始化结果:0
开始转换...

第二次以及之后的访问后台打印的是:【直接执行转换函数,省去了执行初始化函数的时间】

开始转换...

总结使用方法:

public enum SingletonDemo4 {
     
    //枚举元素本身就是单例
    INSTANCE;
     
    //添加自己需要的操作
    public void singletonOperation(){     
    }
}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值