【发布时间】:2013-10-10 05:55:02
【问题描述】:
假设我有一个 empty 构造函数 用于单个 ton 类,以下 2 种方法中哪一种更适合从公共 getInstance 方法返回实例?
-
类级初始化 {
public class ClassName{ private static ClassName instance = new ClassName (); }}
-
使用双重检查锁延迟加载
if (null == instance) { synchronized (this) { if(null == instance) { instance = new className(); } } }
我在想类级初始化在这里不会造成任何伤害。但想从专家那里确认一下。请帮忙
【问题讨论】:
-
有什么理由不使用具有单个值的枚举来代替?那更简单。如果可以的话,我会避免双重检查锁定。 (我也会避免
if (null == instance)的“尤达条件”,因为if (instance == null)对大多数人来说更具可读性。哦,你不能在静态方法中同步this- 并且方法 would 必须是静态的... -
synchronize(this)->synchronized(SingletonClass.class)
标签: java multithreading singleton