Sécurité des threads des blocs statiques en Java

Disons que j’ai du code Java:

public class SomeClass { static { private final double PI = 3.14; private final double SOME_CONSTANT = 5.76; private final double SOME_OTHER_CONSTANT = 756.33; } //rest of class } 

Si un thread instancie une instance de SomeClass et est en train d’initialiser les valeurs du bloc statique lorsqu’un deuxième thread instancie une seconde instance de SomeClass, qu’advient-il du bloc statique? Le deuxième thread l’ignore-t-il en supposant qu’il est déjà initialisé même si le premier thread n’est pas terminé? Ou quelque chose d’autre se passe-t-il?

Si le premier thread n’a pas fini d’initialiser SomeClass, le deuxième thread sera bloqué.

Ceci est détaillé dans la spécification de langage Java de la section 12.4.2 .

L’initialisation de la classe statique est garantie pour Java.

attention, vous n’appelez pas de code qui nécessite le locking de la classe en cours d’initialisation – il se bloquera. voir cet article de blog: http://ramblingabout.wordpress.com/2008/04/10/deadlock-quiz-the-answer/