concurrency Lecture Java dans la pratique, la section 3.5: la revendication est soulevée quepas thread-safe publication objet
public Holder holder;
public void initialize() {
holder = new Holder(42);
}
Outre le fil évidente en toute sécurité de risque de créer 2 cas de titulaire le livre prétend un problème d'édition possible peut se produire, plus encore pour une classe Holder telle que
public Holder {
int n;
public Holder(int n) { this.n = n };
public void assertSanity() {
if(n != n)
throw new AssertionError("This statement is false.");
}
}
une erreur AssertionError peut être levée!
Comment est-ce possible? La seule chose à laquelle je peux penser qui peut permettre un tel comportement ridicule est que le constructeur Holder ne bloque pas, donc une référence serait créée pour l'instance alors que le code du constructeur s'exécute toujours dans un thread différent. Est-ce possible ?
trouvé un lien en ligne à la section du livre http://book.javanb.com/java-concurrency-in-Practice/ch03lev1sec5.html –
Est-ce que cela veut dire tout le champ dans un objet doit être définitif. Y at-il de toute façon je peux me prouver que cela peut arriver. J'ai essayé s'il vous plaît aider – John