java保证一个方法只能执行一次的问题

 更新时间:2023年08月28日 09:30:39   作者:lipengxs  
这篇文章主要介绍了java保证一个方法只能执行一次的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

java保证一个方法只能执行一次

我们经常会遇到一些情况需要某一个方法或者操作只执行一次,比如说配置信息加载,如果配置信息需要动态刷新,这个不在适用范围。

下面列举几种方式

  • 第一种 如果是web容器,可以使用servlet或者Listener
  • 第二种 如果使用spring容器,则可以直接使用注解@PostConstruct
  • 第三种 main直接执行,可以写在静态代码块
static{
}
  • 第四种 封装成一个方法,使用AtomicBoolean来进行判断是否已执行,或者使用同步锁来保证原子性

java让一个方法一分钟只能被调用一次

可以使用 Java 中的计时器(Timer)和定时任务(TimerTask)配合使用实现一个每分钟只能被调用一次的方法。

具体实现步骤如下

定义一个静态变量

lastCalledTime:用于保存上一次方法被调用的时间戳。

在方法中获取当前时间戳。

如果当前时间戳与上一次调用时间戳之差小于一分钟,则返回不执行,否则执行该方法并更新

lastCalledTime:变量为当前时间戳。

以下是示例代码

public class MyClass {
    private static long lastCalledTime = 0;
    public synchronized void myMethod() {
        long currentTime = System.currentTimeMillis();
        if (currentTime - lastCalledTime < 60000) {
            return;
        }
        // 执行方法操作
        lastCalledTime = currentTime;
    }
}

这里使用了关键字 synchronized,确保多线程环境下仅有一个线程可以进入 myMethod() 方法。

需要注意的是,如果方法执行时间超过一分钟,在调用间隔的限制下仍然可能会导致同时执行的问题。

此外,由于计时器本身也会占用系统资源,如果过度滥用此方法限制,可能会影响应用程序整体性能。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 轻松掌握Java享元模式

    轻松掌握Java享元模式

    这篇文章主要帮助大家轻松掌握Java享元模式,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-09-09
  • 一篇文章带你了解Java基础-多态

    一篇文章带你了解Java基础-多态

    这篇文章主要介绍了Java 多态的深入理解的相关资料,子类继承父类的特征和行为,使得子类具有父类的各种属性和方法。或子类从父类继承方法,使得子类具有父类相同的行为,需要的朋友可以参考下
    2021-08-08
  • Java管道流实现线程间通信过程解析

    Java管道流实现线程间通信过程解析

    这篇文章主要介绍了Java管道流实现线程间通信过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • MyBatis 源码分析 之SqlSession接口和Executor类

    MyBatis 源码分析 之SqlSession接口和Executor类

    mybatis框架在操作数据的时候,离不开SqlSession接口实例类的作用,下面通过本文给大家实例剖析MyBatis 源码分析之SqlSession接口和Executor类,需要的朋友参考下吧
    2017-02-02
  • Java使用 try-with-resources 实现自动关闭资源的方法

    Java使用 try-with-resources 实现自动关闭资源的方法

    这篇文章主要介绍了Java使用 try-with-resources 实现自动关闭资源的方法,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-06-06
  • JS+Struts2多文件上传实例详解

    JS+Struts2多文件上传实例详解

    这篇文章主要为大家详细介绍了JS+Struts2多文件上传实例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-08-08
  • java中flatMap用法完整示例

    java中flatMap用法完整示例

    flatMap是java8的Stream流的一个方法,下面这篇文章主要给大家介绍了关于java中flatMap用法的相关资料,文中通过示例代码和图文介绍的非常详细,需要的朋友可以参考下
    2023-05-05
  • 解决Java 结构化数据处理开源库 SPL的问题

    解决Java 结构化数据处理开源库 SPL的问题

    这篇文章主要介绍了Java 结构化数据处理开源库 SPL的问题,Scala提供了较丰富的结构化数据计算函数,但编译型语言的特点,也使它不能成为理想的结构化数据计算类库,对此内容感兴趣的朋友一起看看吧
    2022-03-03
  • 解析Java实现设计模式六大原则之里氏替换原则

    解析Java实现设计模式六大原则之里氏替换原则

    里氏替换原则是用来帮助我们在继承关系中进行父子类的设计。它阐述了有关继承的一些原则,也就是什么时候应该使用继承,什么时候不应该使用继承,以及其中蕴含的原理。它是继承复用的基础,反映了基类与子类之间的关系,是对开闭原则的补充,对实现抽象化具体步骤的规范
    2021-06-06
  • 详解@AliasFor注解的使用与注意事项

    详解@AliasFor注解的使用与注意事项

    @AliasFor注解是在spring源码当中提供的,见名知义,他是为了别名而自定义的注解,下面我们来看看它的使用与注意事项,感兴趣的小伙伴可以了解一下
    2023-08-08

最新评论