La méthode statique synchronisée est-elle légale en Java?La méthode statique synchronisée est-elle légale en Java?
Répondre
Oui. Il obtient le verrou sur l'objet représentant la classe la méthode est définie dans (par exemple MyClass.class)
Oui, et il simplifie les méthodes d'usine statiques comme celle-ci:
class Foo {
private Foo() {}
public static synchronized Foo getInstance() {
if (instance == null) {
instance = new Foo();
}
return instance;
}
private static Foo instance = null;
}
Voici ce qu'il pourrait ressembler si méthodes static
ne pouvaient pas être synchronized
:
class Foo {
private Foo() {}
public static Foo getInstance() {
synchronized (LOCK) {
if (instance == null) {
instance = new Foo();
}
}
return instance;
}
private static Foo instance = null;
private static final Object LOCK = Foo.class;
// alternative: private static final Object LOCK = new Object();
}
pas un gros problème, il enregistre seulement 2 lignes de code.
En fait, ces deux versions sont horribles. il suffit d'initialiser le champ d'instance directement dans sa déclaration. Il sera ensuite initialisé lorsque la classe est accédée pour la première fois et synchronisé implicitement une fois, permettant aux appels de sous-séquence de getInstance() d'être désynchronisés. –
et nous savons tous que les usines statiques comme celle-ci sont mauvaises. Parfois, il faut faire le mal pour faire le travail, mais ça ne va pas. Mieux vaut injecter des ressources. –
- 1. Quelle est la différence entre synchronisation synchronisée et statique?
- 2. java émission synchronisée
- 3. Java statique
- 4. Accès à une méthode statique en C#
- 5. Accès à la méthode statique personnalisée PHP
- 6. Java: StringBuilder, méthode statique et problèmes de synchronisation possibles
- 7. Appel d'une méthode non statique à partir d'une méthode statique en Python
- 8. Utilisation de la classe actuelle dans la déclaration de méthode statique Java
- 9. Comment déterminer quelle partie du code Java doit être synchronisée?
- 10. La méthode HashMap est surchargée en Java
- 11. Quelle classe a appelé ma méthode statique?
- 12. Lorsque créer une méthode statique
- 13. refactorisation méthode/champ statique statique pour les tests
- 14. 5 façons d'utiliser le mot-clé statique en Java
- 15. C++ MI modèle statique - méthode statique disapears à rejoindre
- 16. Java statique vs objets réguliers
- 17. Appel de la méthode HealthVault GetThings en Java
- 18. Conversion d'ActionResult en chaîne URL dans une méthode statique
- 19. Couverture pour l'analyse statique Java
- 20. Méthode publique statique accédant aux variables d'instance privées en Javascript
- 21. jmock se moquer d'une méthode statique
- 22. Méthode de service ou méthode statique de domaine dans Grails?
- 23. Imposer la surcharge de méthode statique dans la classe des enfants en C++
- 24. Récupération champ statique dans la méthode générique par l'expression lambda
- 25. Problèmes de lien C++ avec la méthode statique
- 26. WPF ObjectDataProvider avec la méthode GetPosition statique de souris
- 27. Méthode statique C# à partir de l'objet
- 28. Puis-je appeler une méthode statique dans une autre méthode?
- 29. Que fait la méthode registerNatives()?
- 30. Valeur synchronisée entre C# et C++?
Vous pouvez obtenir la réponse simplement en définissant une méthode synchronisée et en exécutant le compilateur. La réponse est «oui» BTW. –
Lire la question une fois de plus. –