It's thread-safe because the JVM handles lazily loading the nested class.
However, the code you posted doesn't seem to be using this pattern correctly (you shouldn't have a null check), and I think that actually breaks the thread safety. Here's a nice article where you can read more about why this pattern works and how to use it correctly:
Initialization-on-demand holder idiom