Первый безопасен и ленив.
static constructor
s гарантированно будет выполняться только один раз и непосредственно перед первым доступом к Instrance
. Если есть статический конструктор (даже если он пуст), то инициализация статического поля гарантированно будет выполняться непосредственно перед статическим конструктором. Если статического конструктора нет, инициализация поля может произойти раньше.
Второй - ленивый, но я не уверен, действителен ли шаблон двойной блокировки, как этот. Я подозреваю, что он сломан, по крайней мере, в модели памяти ECMA.
Лично я бы избегал любого Class.Instance
синглтона в пользу синглетонов IoC в большинстве ситуаций.