如何避免执行幂等代码?

时间:2011-05-03 07:30:01

标签: java

我有一个类,它有一个初始化成员变量的init方法。所以我希望执行该代码只对该类的任何数量执行运行一次。那怎么办呢?

如果问题不明确,请告诉我。

编辑:

实际上我有一些遗留代码,其中包含数千个具有大init方法的类。它执行成员变量的初始化(使用所有静态值)。

并假设在一个主要方法中,如果我有任何这些类的引用。我运行主方法100次,然后100次执行相同的方法,这是一个性能命中。所以我想把成员变量作为静态,并且对于任意数量的执行只进行一次初始化。但是我认为它会导致OutOfMemory,因为成千上万的类的所有对象都将保留在jvm中直到它死亡。

希望现在很清楚。

感谢。

5 个答案:

答案 0 :(得分:3)

使用静态类方法(不)使用单例反模式。 http://thetechcandy.wordpress.com/2009/12/02/singletons-is-anti-pattern/

答案 1 :(得分:1)

答案 2 :(得分:1)

难道你不能把这个init方法变成一个类方法吗? (在java中,使用“static”关键字)

答案 3 :(得分:0)

  

所以我希望执行该代码只对该类的任何数量执行运行一次。

我担心没有内置语言功能。你必须使用像

这样的东西来封装它
if (!initialized) {
    // init ...
    initialized = true;
}

(但请确保将此类init方法声明为synchronized,这样两个线程都不会因缓存或竞争条件等而初始化对象。)

顺便说一下...... “执行那个类”你的意思有点不清楚。你的意思是“该类的任意数量的实例化”吗?

答案 4 :(得分:0)

1)使用静态块代码:

public class MyClass {
    static {
     // do your thing here, it gets executed just once at class loading
     }
}

2)使用构造函数,正如其他人之前指出的那样