Fil de sécurité de blocs statiques en Java
Disons que j'ai quelques de 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 est de créer une instance de SomeClass et est dans le milieu de l'initialisation des valeurs dans le bloc statique lorsqu'un deuxième thread instancie une deuxième instance de SomeClass, ce qui se passe à la statique bloc? Le deuxième fil de l'ignorer en supposant que c'est déjà initialisé, même si le premier thread n'est pas fait? Ou fait quelque chose d'autre se produit?
Vous devez vous connecter pour publier un commentaire.
Si le premier thread n'a pas terminé l'initialisation SomeClass, le deuxième thread se bloque.
Ceci est détaillé dans le Langage Java Spécification dans la section 12.4.2.
Statique de la classe d'initialisation est garanti d'être thread-safe par Java.
attention à ne pas appeler un code qui nécessitent la serrure de la classe en cours d'initialisation - il va se bloquer. consultez cet article de blog: http://ramblingabout.wordpress.com/2008/04/10/deadlock-quiz-the-answer/