Java 语言基础:如何保证某个函数只被调用一次

Posted sp42a

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java 语言基础:如何保证某个函数只被调用一次相关的知识,希望对你有一定的参考价值。

如何保证某个函数只被调用一次?这种场景很常见,例如初始化的时候。大概任何一个略懂编程的人都会想到用静态变量这个方法。

static boolean flag = false;

if(!flag) 
    callee();
    flag = true;

很遗憾,在高并发的场景下,并不能保证函数只被调用一次。于是我们可以使用 volatile 关键字

public static volatile initialized = false;
public void init() 
    if( initialized == false )
        initialized = true;
        // 这里初始化代码....
    

或者高级一点的 AtomicBoolean

private static AtomicBoolean initialized = new AtomicBoolean(false);
public void init() 
   if( initialized.compareAndSet(false, true) )//如果为false,更新为true 
       // 这里放置初始化代码....
   

以上是关于Java 语言基础:如何保证某个函数只被调用一次的主要内容,如果未能解决你的问题,请参考以下文章

Java 语言基础:如何保证某个函数只被调用一次

在java中如何保证程序模块只被执行一次

__attribute__((constructor)) 是不是保证只被调用一次?

如何确保 std::call_once 真的只被调用一次

为啥析构函数被调用两次而构造函数只被调用一次?

C++不是说虚基类构造函数只被调用一次吗?