「単一のインスタンス」を保証するSingletonパターンを実装する際、マルチスレッド環境での二重チェックロッキング(Double-Checked Locking)の問題に対処するための一般的な手法(Java等の場合)はどれか。

Javaなどのメモリモデルでは、初期化中の不完全なオブジェクトが見えないようにvolatileを使ったり、静的内部クラス(Holder)による遅延初期化を利用する。