Let\'s say I have some Java code:
public class SomeClass {
static {
private final double PI = 3.14;
private final double SOME_CONSTANT =
If the first thread hasn't finished initializing SomeClass, the second thread will block.
This is detailed in the Java Language Specification in section 12.4.2.
watch out that you dont call code that require the lock for the class being initialized - it will deadlock. see this blog post: http://ramblingabout.wordpress.com/2008/04/10/deadlock-quiz-the-answer/
Static class initialization is guaranteed to be thread-safe by Java.
Static block is always thread safe while its getting initialzed. This is the reason use static variable of singleton object as one way of creating singleton object (singelton desing pattern).