Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 分析JVM中作为常量构造的单例模式_Java_Design Patterns_Jvm - Fatal编程技术网

Java 分析JVM中作为常量构造的单例模式

Java 分析JVM中作为常量构造的单例模式,java,design-patterns,jvm,Java,Design Patterns,Jvm,我想通过以下方式使用单例模式: public static final XXX INSTANCE = new XXX(); private XXX() {} 你能从JVM的角度分析结果吗?如果你有一个多线程的应用程序,你可能会遇到问题。这个职位可能会有所帮助 将单例初始化为最终静态字段是安全的。您需要记住,尽管构造本身是线程安全的,但它并不能增强内部代码的安全性 有时候单身是解决问题的正确方法,但我鼓励你一般远离他们 你试过了吗?你遇到什么问题了吗?没有。唯一的问题是您将无法

我想通过以下方式使用单例模式:

    public static final XXX INSTANCE = new XXX();

    private XXX() {}

你能从JVM的角度分析结果吗?

如果你有一个多线程的应用程序,你可能会遇到问题。这个职位可能会有所帮助

将单例初始化为最终静态字段是安全的。您需要记住,尽管构造本身是线程安全的,但它并不能增强内部代码的安全性


有时候单身是解决问题的正确方法,但我鼓励你一般远离他们

你试过了吗?你遇到什么问题了吗?没有。唯一的问题是您将无法延迟加载它。但是对于大多数对象来说,这并不是必需的。除了下面提到的多线程问题之外,请注意,在Java中,同一个类可以在同一个VM中多次加载(例如,在web服务器中的单独战争中,如果该类不在服务器的类路径中)。Java中的单例不能保证是这样的,所以使用它们时要小心。可能重复的I将使用一个
enum
和一个instance.Hogwash。静态常量将在类加载时初始化,远远早于任何用户线程运行。@amalloy:threads?你的意思是说这种模式是线程安全的吗?如果是这样,当且仅当值是不可变的时,这才是真的。显然,如果他在构造单例后试图从多个线程调用mutator方法,他将遇到问题,就像线程访问任何对象一样。但是问题是关于初始化它,因为他没有尝试延迟加载它,tkcsam提到的线程是不相关的。